SparkCore / SparkSQL中窗口函数RANK, DENSE_RANK, ROW_NUMBER的区别

本文介绍了SparkSQL中三种窗口函数RANK、DENSE_RANK和ROW_NUMBER的区别。RANK在遇到并列时会产生不连续的序号,DENSE_RANK确保并列情况下的序号连续,而ROW_NUMBER则为每行赋予唯一的连续序号。通过一个实例展示了这三种函数在按年级分组和分数降序排列时的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RANK, DENSE_RANK, ROW_NUMBER都是把表中的行按分区内的排序标上序号,但有一点差别:

RANK:可以生成不连续的序号,比如按分数排序,第一第二都是100分,第三名98分,那第一第二就会显示序号1,第三名显示序号3。

DENSE_RANK: 生成连续的序号,在上一例子中,第一第二并列显示序号1,第三名会显示序号2。

ROW_NUMBER: 顾名思义就是行的数值,在上一例子中,第一第二第三将会显示序号为1,2,3。

 

下面的例子帮助理解,按年级分组,分数降序排列,分别新建列RANK, DENSE_RANK, ROW_NUMBER:

考试成绩排名
姓名 年级 分数 RANK DENSE_RANK ROW_NUMBER
张三 一年级 100 1 1 1
李四 一年级 100 1 1 2
王五 一年级 98 3 2 3
小明 二年级 100 1 1 1
小芳
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值