Hive11_Rank函数

2024-01-08 09:26:23

Rank

1)函数说明

RANK() 排序相同时会重复,总数不会变
DENSE_RANK() 排序相同时会重复,总数会减少
ROW_NUMBER() 会根据顺序计算

2)数据准备

在这里插入图片描述

3)需求

计算每门学科成绩排名。

4)创建本地 score.txt,导入数据

[root@localhost datas]$ vi score.txt
孙悟空	语文	87
孙悟空	数学	95
孙悟空	英语	68
大海	语文	94
大海	数学	56
大海	英语	84
宋宋	语文	64
宋宋	数学	86
宋宋	英语	84
婷婷	语文	65
婷婷	数学	85
婷婷	英语	78

5)创建 hive 表并导入数据

create table score(
name string,
subject string, 
score int) 
row format delimited fields terminated by "\t";
load data local inpath '/usr/soft/datas/score.txt' into table score;

6)按需求查询数据

6.1 按照全部分数排序

select * , rank() over(order by score) from score;  

在这里插入图片描述

select * , dense_rank() over(order by score) from score;

在这里插入图片描述

select * , row_number() over(order by score) from score;

在这里插入图片描述

6.2 按照学科排序

select * ,rank() over(partition by subject order by score desc) from score;
select name,
subject,
score,
rank() over(partition by subject order by score desc) rp,
dense_rank() over(partition by subject order by score desc) drp,
row_number() over(partition by subject order by score desc) rmp
from score;
name	subject	score	rp	drp	rmp
孙悟空	数学	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

扩展:求出每门学科前三名的学生?

select
	name,subject,score
from
	(select
    	*, rank() over(partition by subject order by score desc)rk
     from score) t1
where rk<=3;
     

``
在这里插入图片描述

文章来源:https://blog.csdn.net/tonyshi1989/article/details/135377141
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。