RANK与DENSE_RANK
处理并列排名场景,理解RANK和DENSE_RANK的区别。 · 难度:入门 · +15XP
RANK与DENSE_RANK
RANK和DENSE_RANK都是窗口函数用于排名。RANK在并列后会跳过后续排名(如1,1,3),而DENSE_RANK不跳过(如1,1,2)。
语法
RANK() OVER (ORDER BY col)
DENSE_RANK() OVER (ORDER BY col)概念讲解
选择哪种取决于业务需求:比赛排名常使用DENSE_RANK,而学术排名可能用RANK。
代码示例
SELECT name, score, RANK() OVER (ORDER BY score DESC) AS rank, DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank FROM exam;表格示例
| name | score | rank | dense_rank |
|---|---|---|---|
| Alice | 95 | 1 | 1 |
| Bob | 95 | 1 | 1 |
| Charlie | 90 | 3 | 2 |
练习
在销售表中按销售额降序,同时显示RANK和DENSE_RANK,观察并列情况下的差异。