You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现先按ColA升序再按分组内ColB重复次数降序的SQL排序?

解决SQL分组内ColB重复次数排序问题

你的核心问题在于窗口函数的分区范围不对——原来的partition by ColB统计的是全局范围内ColB的重复次数,而非每个ColA分组内的次数。要实现需求,需要把ColA也加入分区条件,让统计范围限定在当前ColA分组内。

修正后的SQL语句如下:

SELECT ColA, ColB
FROM your_table
ORDER BY ColA ASC,
         COUNT(*) OVER (PARTITION BY ColA, ColB) DESC;

原理说明

  • PARTITION BY ColA, ColB:将数据先按ColA分组,再在每个ColA分组内按ColB细分,统计每个ColA-ColB组合的出现次数
  • 排序时先按ColA升序,再按分组内ColB的重复次数降序,就能实现“同ColA下,重复多的ColB排在前面”的效果

示例验证

假设你的表数据如下:

ColAColB
1X
1X
1Y
2Y
2Z
2Z
2Z

执行修正后的SQL后,输出结果会是:

ColAColB
1X
1X
1Y
2Z
2Z
2Z
2Y

可以看到,每个ColA分组内,重复次数多的ColB确实排在了前面。

内容的提问来源于stack exchange,提问作者Nolan Jones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 10:57:33