什么是 DENSE_RANK 函数?
DENSE_RANK() 是 SQL 中的一种窗口函数(Window Function),用于对结果集中的行进行排名。与 RANK() 不同,DENSE_RANK() 在遇到相同值时不会跳过后续排名。
基本语法
DENSE_RANK() OVER (
[PARTITION BY partition_expression, ... ]
ORDER BY sort_expression [ASC | DESC], ...
)
使用示例
假设有一个学生成绩表 scores:
SELECT
name,
score,
DENSE_RANK() OVER (ORDER BY score DESC) AS rank_dense
FROM scores;
若成绩为:95、95、90,则排名结果为:1、1、2(而 RANK() 会是 1、1、3)。
DENSE_RANK vs RANK vs ROW_NUMBER
- ROW_NUMBER():为每一行分配唯一序号,即使值相同。
- RANK():相同值获得相同排名,但会跳过后续名次。
- DENSE_RANK():相同值获得相同排名,不跳过后续名次。
适用数据库
DENSE_RANK() 被以下主流数据库支持:
- MySQL 8.0+
- PostgreSQL
- SQL Server
- Oracle
- SQLite 3.25.0+(需启用窗口函数)