DENSE_RANK 函数是一个窗口函数,用于对数据集中的行进行排名。它返回一个整数,表示每行的排名,与排序顺序一致。不同于 RANK 函数,DENSE_RANK 对相等值的排名相同,而不会跳过任何排名。
二、DENSE_RANK 函数的语法
DENSE_RANK 函数的语法如下:
DENSE_RANK() OVER (PARTITION BY 分区表达式 ORDER BY 排序表达式)
PARTITION BY
:指定对哪些列进行分区。每个分区中的行将单独进行排名。
ORDER BY
:指定按哪些列进行排序。排序结果将作为排名依据。
三、使用 DENSE_RANK
DENSE_RANK 函数可用于各种场景:
* 对数据集中的行进行排名,并分配唯一的排名。
* 对相同值的排名相同,以进行分组和汇总。
* 创建独特标识,用于区分具有相似值的记录。
四、示例
考虑以下数据表:
| id | name | score |
|---|---|---|
| 1 | John | 90 |
| 2 | Mary | 85 |
| 3 | Bob | 85 |
| 4 | Alice | 95 |
| 5 | Tom | 80 |
要对表中的行按分数从高到低进行排名,可以使用以下查询:
SELECT id, name, score, DENSE_RANK() OVER (ORDER BY score DESC) AS rank
FROM table_name;
查询结果如下:
| id | name | score | rank |
|---|---|---|---|
| 4 | Alice | 95 | 1 |
| 1 | John | 90 | 2 |
| 2 | Mary | 85 | 3 |
| 3 | Bob | 85 | 3 |
| 5 | Tom | 80 | 5 |
DENSE_RANK 给出每行的排名,即使 Mary 和 Bob 的分数相同,它们也具有相同排名 (3)。