跳到主要内容

dense_rank:连续排名

速查结论

dense_rank() 是 Spark SQL 中用于**计算一组值中某个值的连续排名(无间隙)**的窗口函数。

语法

dense_rank() OVER (PARTITION BY expr ORDER BY expr [ASC|DESC])

参数说明

参数说明
无显式参数dense_rank() 不接收显式参数,它基于 OVER 子句中的 ORDER BY 列自动计算排名。

示例

> SELECT a, b, dense_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 2
A2 3 1

常见报错与避坑指南

  • dense_rank vs rankdense_rank() 不会在排名序列中产生间隔(而 rank() 会)。例如上例中 A1 分区的值 2 排名为 2(连续),而在 rank() 中会是 3。选择哪个函数取决于业务需求。
  • 排序依赖:排名结果完全依赖于 ORDER BY 列。如果排序列有重复值,这些行会获得相同的排名。

Since: 2.0.0

📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

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

交流微信二维码

你可能还想看