denserank 是一种常见的排名函数,广泛应用于数据分析、数据库查询(如 SQL)以及编程语言(如 Python 的 pandas 库)中。与传统的 RANK() 不同,DENSE_RANK() 在处理相同值时不会跳过后续排名。
基本特性
- 相同值获得相同排名
- 下一个不同值的排名是连续的(不跳号)
- 适用于需要紧凑排名的场景
SQL 中的 denserank 示例
SELECT
name, score,
DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank
FROM students;
Python (pandas) 中的实现
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'score': [90, 85, 90, 80]
})
df['dense_rank'] = df['score'].rank(method='dense', ascending=False).astype(int)
print(df)
应用场景
denserank 常用于学生成绩排名、商品销量排行、竞赛积分榜等需要“并列但不跳号”排名逻辑的业务场景。
与 RANK 和 ROW_NUMBER 的区别
| 分数 | ROW_NUMBER | RANK | DENSE_RANK |
|---|---|---|---|
| 100 | 1 | 1 | 1 |
| 100 | 2 | 1 | 1 |
| 90 | 3 | 3 | 2 |
| 80 | 4 | 4 | 3 |