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

如何在PostgreSQL中实现考虑并列的跳号行排名?

在PostgreSQL中生成跳号并列排名序列

需求:查询时生成并列同序、后续跳号的排名序列(形如1 1 3 4 5 5 7…),当sum_all列值相同时,排名序号相同,后续序号跳过已占用的位次。

示例表创建语句

create table test(name,sum_all)as values
 ('a',100)
,('b',95)
,('c',100)
,('d',75)
,('e',55);

期望查询结果

namesum_allorder_number
a1001
c1001
b953
d754
e555

解决方案

直接使用PostgreSQL内置的RANK()窗口函数即可实现该需求,该函数会为相同值的行分配相同排名,同时跳过已被占用的位次。

查询语句如下:

SELECT 
    name,
    sum_all,
    RANK() OVER (ORDER BY sum_all DESC) AS order_number
FROM test
ORDER BY sum_all DESC, name;

说明

  • RANK() OVER (ORDER BY sum_all DESC):按sum_all降序排列,为相同sum_all的行分配相同排名,后续行的排名会跳过并列占用的位次(比如两个100占了第1位,下一行直接排第3)。
  • 最后外层的ORDER BY sum_all DESC, name是为了让结果和示例顺序一致,可根据实际需求调整排序规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:40:03