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

PostgreSQL排名问题求助:同分运动员需赋予相同名次

PostgreSQL 同得分同名次实现方案

在PostgreSQL里,直接用窗口函数就能轻松实现同得分同名次的需求,不用写复杂的IF函数或者自定义统计逻辑,推荐用RANK()或DENSE_RANK():

1. 使用 RANK() 函数

RANK()会为相同得分分配相同名次,后续不同得分的名次会跳过中间空缺的位置(比如两个第2名,下一个得分的名次是第4名):

SELECT
    Name,
    Points,
    -- 按得分降序排名,得分高的名次靠前
    RANK() OVER (ORDER BY Points DESC) AS 名次
FROM 你的表名;

2. 使用 DENSE_RANK() 函数

如果需要名次连续不空缺(两个第2名之后直接是第3名),用DENSE_RANK():

SELECT
    Name,
    Points,
    DENSE_RANK() OVER (ORDER BY Points DESC) AS 名次
FROM 你的表名;

把上述SQL里的你的表名替换成实际表名即可,这两个窗口函数是PostgreSQL处理排名场景的标准方法,比自定义函数更高效且易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:39:52