新手SQL ORDER BY问题:如何调整查询结果的排序规则
解决SQL排序问题:将单col1关联的col2记录后置
调整后的查询语句
SELECT g.col1, g.col2, g.col3, g.col4, SUM(num1) AS sum_num1, SUM(num2) AS sum_num2, SUM(num3) AS sum_num3 FROM tablename g WHERE g.col1 IN ('name1','name2') AND g.col2 IN ('proc0','proc1','proc2','proc3','proc4','proc5') AND g.col4 = '2024-04-30' GROUP BY 1,2,3,4 ORDER BY -- 先按每个col2对应的唯一col1数量降序,多关联的排前面 COUNT(DISTINCT col1) OVER (PARTITION BY col2) DESC, -- 再按原排序规则 2, 1 DESC;
逻辑说明
- 窗口函数
COUNT(DISTINCT col1) OVER (PARTITION BY col2)会计算每个col2对应的不同col1的数量:比如proc1对应name1和name2,数量为2;proc0只对应name1,数量为1。 - 排序时优先按这个数量降序,就能让对应多个col1的col2记录排在最前面,单个col1关联的记录自动后置。
- 如果需要把单个col1关联的记录排在最前面,只需将
DESC改为ASC即可。
匹配期望输出
调整后的排序逻辑会让proc1、proc2、proc5(对应2个col1)的记录先出现,接着是proc0、proc4(仅对应1个col1)的记录,完全匹配你给出的期望输出结构。
内容的提问来源于stack exchange,提问作者h ca
相关产品推荐
相关产品推荐

