什么是 DENSE_RANK?
DENSE_RANK() 是 SQL 中的一种窗口函数,用于为结果集中的每一行分配一个排名。
与 RANK() 不同的是,DENSE_RANK() 在遇到相同值时不会跳过后续排名。
例如,如果有两个并列第1名,则下一名是第2名(而不是第3名)。
基本语法
DENSE_RANK() OVER (
[PARTITION BY partition_expression, ...]
ORDER BY sort_expression [ASC | DESC], ...
)
使用示例
假设有一张学生成绩表 scores:
SELECT
student_name,
subject,
score,
DENSE_RANK() OVER (PARTITION BY subject ORDER BY score DESC) AS dense_rank
FROM scores;
该查询将为每个学科内的学生按分数从高到低进行密集排名。
DENSE_RANK vs RANK vs ROW_NUMBER
- ROW_NUMBER():为每一行分配唯一序号,即使值相同。
- RANK():相同值获得相同排名,但会跳过后续名次(如 1,1,3)。
- DENSE_RANK():相同值获得相同排名,不跳过后续名次(如 1,1,2)。