SQL-窗口函数DENSE_RANK 和 RANK的区别
DENSE_RANK 和 RANK 都是 SQL 中的窗口函数,用于为结果集中的行分配排名,但它们在处理并列排名时的方式不同。以下是它们的区别及示例说明:
1. RANK 函数
- 特点:当出现并列排名时,后续排名会跳过被占用的名次。
- 示例:
假设数据为[100, 100, 90, 80, 80, 70]:结果:SELECT 分数, RANK() OVER (ORDER BY 分数 DESC) AS rank FROM 成绩表;分数 | rank------------100 | 1100 | 190 | 3 -- 跳过第2名80 | 480 | 470 | 6 -- 跳过第5名
2. DENSE_RANK 函数
- 特点:当出现并列排名时,后续排名不跳过名次,保持连续。
- 示例:
同样数据[100, 100, 90, 80, 80, 70]:结果:SELECT 分数, DENSE_RANK() OVER (ORDER BY 分数 DESC) AS dense_rank FROM 成绩表;分数 | dense_rank------------100 | 1100 | 190 | 2 -- 不跳过名次80 | 380 | 370 | 4 -- 保持连续
对比总结
| 场景 | RANK 结果 | DENSE_RANK 结果 |
|---|---|---|
| 前两名并列第一 | 1,1,3 | 1,1,2 |
| 后续并列不影响连续性 | 跳过名次 | 保持名次连续 |
应用场景
- RANK:适用于允许排名空缺的场景(如比赛名次)。
- DENSE_RANK:适用于需要连续排名的场景(如等级划分)。
本文来自博客园,作者:业余砖家,转载请注明原文链接:https://www.cnblogs.com/yeyuzhuanjia/p/18828192

浙公网安备 33010602011771号