gpt4 book ai didi

mysql - UNION ALL 结果未正确排序

转载 作者:行者123 更新时间:2023-11-30 21:50:48 28 4
gpt4 key购买 nike

需要根据不同的条件从表中进行复杂的选择和排序。当我分别发出两个请求时,一切正常,如果我合并,它输出不排序 - 通过表的关键字段的增长

(SELECT * 
FROM `user`
WHERE `user`.`rank_golos` >=22.1
order by `user`.rank_yearnub DESC, `user`.rank_golos DESC)
UNION ALL
(SELECT *
FROM `user`
WHERE `user`.`rank_golos` <22.1 and `user`.`rank_golos` >0
order by `user`.rank_golos DESC, `user`.rank_yearnub DESC)

最佳答案

union all 连续输出每个查询的结果 - 您的行将在每个查询结果中排序,但不是整体排序。

要实现整体排序,请通过创建外部查询来包装 union all 结果,将 order by 移动到两个查询之外。

要根据结果来自 union all 的哪一半来实现不同的排序,请将有关行源的信息添加到行中,并使用它来获得特定的排序:

SELECT * FROM (
SELECT *, 1 as source
FROM `user`
WHERE `user`.rank_golos >= 22.1
UNION ALL
SELECT *, 2
FROM `user`
WHERE `user`.rank_golos < 22.1 and `user`.rank_golos > 0
) x
order by
case when source = 1 then rank_yearnub else rank_golos end DESC,
case when source = 1 then rank_golos else rank_yearnub end DESC

如果您需要从查询输出中排除source,您可以包装上面的内容和另一个只选择othersource列的外部查询.

我还删除了不必要的括号。

关于mysql - UNION ALL 结果未正确排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47368447/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com