Hive编号函数rank() dense_rank() row_number()

原始数据(姓名, 科目, 成绩)

孙悟空	数学	95
宋宋	数学	86
婷婷	英语	78
婷婷	数学	85
孙悟空	语文	87
婷婷	语文	65
娜娜	数学	56
宋宋	英语	84
孙悟空	英语	68
娜娜	语文	94
娜娜	英语	84
宋宋	语文	64

在hive中建表

drop table tb_score ;
create table tb_score(
name  string ,
subject string ,
score double
)
row format delimited fields  terminated by "\t" ;
load data local inpath "/doit16/score.txt" into table tb_score ;

需求: 每个科目成绩倒序排列, 并排名
1.使用rank()

select
*,
rank() over(partition by subject order by score desc )
from
tb_score

查询结果:
在这里插入图片描述
2. 使用dense_rank()

select
*,
dense_rank() over(partition by subject order by score desc )
from
tb_score

查询结果:
在这里插入图片描述
3.使用row_number

select
*,
row_number() over(partition by subject order by score desc )
from
tb_score

查询结果:
在这里插入图片描述
注意红框中的中的区别

rank() 相同字段相同序号,后面跳过 例如 88 88 94 100 四个数排序 对应的序号是1 1 3 4

dense_rank() 相同字段相同序号,后面紧跟,不跳过 例如 88 88 94 100 四个数排序 对应的序号是1 1 2 3

row_number() 相同字段也要排序 例如 88 88 94 100 四个数排序 对应的序号是1 2 3 4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值