[英]UNION ALL results are not sorted properly
有必要从表中进行复杂选择,并对不同条件进行排序。 当我分别提出两个请求时,一切正常,如果我结合起来,它的输出无需排序-通过表的关键字段的增长
(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
并union all
结果,从而将order by
移动到两个查询之外 。
要根据union all
结果来自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
从查询的输出,你可以包装上面,并且只选择比其他所有列的另一个外部查询source
。
我还删除了不必要的括号。
我找到了解决方案
select * from user
where rank_golos >0
order by rank_golos >=22.1 desc,
if (rank_golos >=22.1, rank_yearnub, rank_golos) desc,
if (rank_golos >=22.1, rank_golos, rank_yearnub) desc
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.