rank:跳跃排名
速查结论
rank() 是 Spark SQL 中用于**计算一组值中某个值的排名(有间隙、会跳跃)**的窗口函数。
语法
rank() OVER (PARTITION BY expr ORDER BY expr [ASC|DESC])
参数说明
| 参数 | 说明 |
|---|---|
| 无显式参数 | rank() 不接收显式参数,它基于 OVER 子句中的 ORDER BY 列自动计算排名。 |
示例
> SELECT a, b, rank(b) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
A1 1 1
A1 1 1
A1 2 3
A2 3 1
常见报错与避坑指南
- 排名间隙:
rank()在遇到并列值时会产生排名间隙。上例中 A1 分区的值 2 排名为 3(跳过了 2),因为有两个并列排名 1 的行。如果需要连续排名,请使用dense_rank()。 - 与 row_number 的区别:
rank()对并列值赋予相同排名,而row_number()始终为每行分配唯一序号。
Since: 2.0.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

💬加群交流
备注「数据仓库技术」加入社群,每日一道大厂SQL真题
