Hive高级 (Rank函数)

博客介绍了Hive中的Rank、Dense_Rank和ROW_NUMBER函数在处理成绩排名场景的应用。以孙悟空、沙悟净、宋松松和罗婷婷四人的语文、数学、英语成绩为例,解释了三种排名函数的区别:Rank在分数相同时不会跳过排名,Dense_Rank会去除重复排名,ROW_NUMBER则会为每个相同的分数分配不同的排名。
摘要由CSDN通过智能技术生成

有如下数据:

孙悟空,语文,87
孙悟空,数学,95
孙悟空,英语,68
沙悟净,语文,94
沙悟净,数学,56
沙悟净,英语,84
宋松松,语文,64
宋松松,数学,86
宋松松,英语,84
罗婷婷,语文,65
罗婷婷,数学,85
罗婷婷,英语,78

需求:查询每科成绩的排名

分析:rank():分数相同,不去掉数据(并排,假设有2、3分数相同,都排第二名,下面一个就是第四名,没有第三)

          dense_rank():分数相同,则去掉(并排,下面的数据+1) 

         ROW_NUMBER() :不并排,假设二三分数相同,依然会排出第二名、第三名

 

具体看英语成绩的排名:

-- 建表
create table score(
    name string,
    subject string,
    score int)
row format delimited
fields terminated by ",";

--插数据
 load data local inpath "/usr/local/src/test4/hive/score.txt" into table score;

查询:

select * ,
    RANK()  over(partition by subject  order by score desc) rank,
    DENSE_RANK()  over(partition by subject  order by score desc) dense_rank ,
    ROW_NUMBER()  over(partition by subject  order by score desc) row_num
from score;

res:
+-------------+----------------+--------------+-------+-------------+----------+--+
| score.name  | score.subject  | score.score  | rank  | dense_rank  | row_num  |
+-------------+----------------+--------------+-------+-------------+----------+--+
| 孙悟空         | 数学             | 95           | 1     | 1           | 1        |
| 宋松松         | 数学             | 86           | 2     | 2           | 2        |
| 罗婷婷         | 数学             | 85           | 3     | 3           | 3        |
| 沙悟净         | 数学             | 56           | 4     | 4           | 4        |
| 宋松松         | 英语             | 84           | 1     | 1           | 1        |
| 沙悟净         | 英语             | 84           | 1     | 1           | 2        |
| 罗婷婷         | 英语             | 78           | 3     | 2           | 3        |
| 孙悟空         | 英语             | 68           | 4     | 3           | 4        |
| 沙悟净         | 语文             | 94           | 1     | 1           | 1        |
| 孙悟空         | 语文             | 87           | 2     | 2           | 2        |
| 罗婷婷         | 语文             | 65           | 3     | 3           | 3        |
| 宋松松         | 语文             | 64           | 4     | 4           | 4        |
+-------------+----------------+--------------+-------+-------------+----------+--+

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值