繁体   English   中英

UNION ALL结果未正确排序

[英]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 allunion 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM