原始数据(姓名, 科目, 成绩)
孙悟空 数学 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