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

SQL中如何基于Total列生成同值同序号的Order列?

解决方案

你需要用DENSE_RANK()窗口函数替代ROW_NUMBER(),它会为相同的Total值分配相同的序号,且序号是连续的,完全匹配你的预期结果。

完整SQL语句示例

SELECT 
    "Groupe",
    "Count",
    SUM("Count") OVER (PARTITION BY "Groupe") AS "Total",
    DENSE_RANK() OVER (ORDER BY SUM("Count") OVER (PARTITION BY "Groupe") DESC) AS "Order"
FROM your_table_name;

结果说明

  • SUM("Count") OVER (PARTITION BY "Groupe") 继续用于计算每个分组的累计总和Total
  • DENSE_RANK() OVER (ORDER BY ... DESC) 会根据Total的降序排序,相同Total值的行获得相同的序号,序号不会出现跳跃(比如如果有多个相同的最大值,都标记为1,下一个不同值标记为2)

如果使用RANK()函数,当有相同值时,后续序号会跳过对应数量的位置(比如两个1之后,下一个是3),而你的预期结果需要连续的序号,所以DENSE_RANK()是更合适的选择。

验证结果

执行上述语句后,会得到你想要的输出:

Groupe | Count | Total | Order    
A      | 22    | 32    | 1    
B      | 12    | 28    | 2
A      | 10    | 32    | 1    
B      | 16    | 28    | 2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:35:24