Hive的Rank排名(rank函数,dense
阿里云国际版折扣https://www.yundadi.com |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
一、区别
三者通常都会配合窗口函数over()并结合partition by order by xxx来分组排序即形式使用function_name over(partition by xxx order by xxx)。首先三者都是产生一个自增序列不同的是
row_number() 排序的字段值相同时序列号不会重复如1、2、(2)3、4、5出现两个2第二个2继续编号3
rank() 排序的字段值相同时序列号会重复且下一个序列号跳过重复位如1、2、2、4、5出现两个2跳过序号3继续编号4
dense_rank() 排序的字段值相同时序列号会重复且下一个序列号继续序号自增如1、2、2、3、4出现两个2继续按照3编号
二、举例介绍
有如下学生成绩表student_score假设只有一个学生多门课程
统计每个学生各科成绩由高到低排序语句如下
SELECT
row_number() over(partition by name order by score DESC) AS row_number,
rank() over(partition by name order by score DESC) AS rank,
dense_rank() over(partition by name order by score DESC) AS dense_rank,
name,
subject,
score
FROM
统计结果如下图所示
![](https://img-blog.csdnimg.cn/img_convert/480621577ab19c23bb66980e8af9aace.png)
从上图结果可以看出区别
![](https://img-blog.csdnimg.cn/img_convert/32de837247d73f495ea1c92453c05628.png)
row_number 排序字段值相同时序号不同下一个序号顺序自增
rank 排序字段值相同时序号相同下一个序号跳跃自增
dense_rank 排序字段值相同时序号相同下一个序号顺序自增