网站首页 网站地图
网站首页 > 网络游戏 > rank函数降序排名

rank函数降序排名

时间:2026-04-01 23:18:08

在 SQL 中,RANK()DENSE_RANK() 是两个常用的 排名函数,它们都可以用来对数据进行降序排名,但它们的实现方式略有不同。

✅ 一、RANK() 函数

作用:

  • 为每一行分配一个排名,相同值的行会获得相同的排名,但排名之间会跳过。
  • 如果有相同的值,排名会跳过,即:
    RANK() = 1 → 该行排名为 1,下一行如果值相同,排名为 2。

示例:

SELECT 
    id, 
    value, 
    RANK() OVER (ORDER BY value DESC) AS rank
FROM 
    your_table;

示例数据:

id value
1 100
2 90
3 90
4 80
5 80
6 70

输出结果:

id value rank
1 100 1
2 90 2
3 90 2
4 80 3
5 80 3
6 70 4

✅ 二、DENSE_RANK() 函数

作用:

  • 为每一行分配一个排名,相同值的行会获得相同的排名,但排名之间不会跳过
  • 如果有相同的值,排名会连续。

示例:

SELECT 
    id, 
    value, 
    DENSE_RANK() OVER (ORDER BY value DESC) AS dense_rank
FROM 
    your_table;

输出结果:

id value dense_rank
1 100 1
2 90 1
3 90 1
4 80 2
5 80 2
6 70 3

✅ 三、总结对比

函数 排名规则 举例
RANK() 相同值跳过,排名不连续 1, 2, 2, 3, 3, 4
DENSE_RANK() 相同值不跳过,排名连续 1, 1, 1, 2, 2, 3

✅ 四、使用场景

  • RANK():适用于需要跳过相同值的排名,比如:
    RANK() OVER (ORDER BY score DESC)

  • DENSE_RANK():适用于需要连续排名,比如:
    DENSE_RANK() OVER (ORDER BY score DESC)

✅ 五、SQL 语法示例

示例 1:使用 RANK()

SELECT 
    id, 
    value, 
    RANK() OVER (ORDER BY value DESC) AS rank
FROM 
    your_table;

示例 2:使用 DENSE_RANK()

SELECT 
    id, 
    value, 
    DENSE_RANK() OVER (ORDER BY value DESC) AS dense_rank
FROM 
    your_table;

✅ 六、注意事项

  • RANK()DENSE_RANK()窗口函数,需要在 OVER() 子句中使用。
  • 两者都支持 ORDER BY,但 DENSE_RANK() 不会跳过排名。

如需进一步了解窗口函数,可以参考 SQL 标准或相关数据库文档(如 MySQL、PostgreSQL、SQL Server 等)。需要我帮你写一个完整的 SQL 示例吗?