跳到主要内容

row_number:行号分配

速查结论

row_number() 是 Spark SQL 中用于**为窗口分区内的每一行分配唯一、连续的序号(从1开始)**的窗口函数。

语法​

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

参数说明​

参数说明
无显式参数row_number() 不接收显式参数,它基于 OVER 子句中的 ORDER BY 列自动为每行分配唯一序号。

示例​

> SELECT a, b, row_number() 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 2
A1 2 3
A2 3 1

常见报错与避坑指南​

  • 并列值不共享序号:与 rank() 和 dense_rank() 不同,row_number() 对并列值也会分配不同的序号。上例中 A1 分区的两个并列值 1 分别获得序号 1 和 2。如果需要并列值共享排名,请使用 rank() 或 dense_rank()。
  • 常用去重场景:row_number() 常用于数据去重(取每组第一行),搭配 WHERE rn = 1 过滤条件使用。

Since: 2.0.0

微信公众号二维码关注公众号
交流微信二维码加群交流
赞赏二维码赞赏

你可能还想看