关闭

实践rank,dense_rank,row_number区别

标签: hive
133人阅读 评论(0) 收藏 举报
分类:

1、新建表
create table score(name string,subject string,score string);
2、插入数据
insert into score values('1','En','80'),('2','En','80'),('3','En','90'),('4','En','60'),('5','En','70'),('6','En','81'),('8','En','50')
insert into score values('1','Math','80'),('2','Math','80'),('3','Math','90'),('4','Math','60'),('5','Math','70'),('6','Math','81'),('8','Math','50')
3、查询
select * from score


score.name       score.subject       score.score
0       1       En       80
1       2       En       80
2       3       En       90
3       4       En       60
4       5       En       70
5       6       En       81
6       8       En       50
7       1       Math       80
8       2       Math       80
9       3       Math       90
10       4       Math       60
11       5       Math       70
12       6       Math       81
13       8       Math       50
4、row_number()
select subject,score,row_number() over(partition by subject order by score desc) rank
from score


       subject       score       rank
7       En       90       1
8       En       81       2
9       En       80       3
10       En       80       4
11       En       70       5
12       En       60       6
13       En       50       7
0       Math       90       1
1       Math       81       2
2       Math       80       3
3       Math       80       4
4       Math       70       5
5       Math       60       6
6       Math       50       7
5、dense_rank()
select subject,score,dense_rank() over(partition by subject order by score desc) rank
from score
        subject       score       rank
0       Math       90       1
1       Math       81       2
2       Math       80       3   <----允许有并列名次出现
3       Math       80       3   <----并列名次之后继续按照顺序排名
4       Math       70       4
5       Math       60       5
6       Math       50       6
7       En       90       1
8       En       81       2
9       En       80       3
10       En       80       3
11       En       70       4
12       En       60       5
13       En       50       6


6、rank()


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


        subject       score       rank
0       Math       90       1
1       Math       81       2
2       Math       80       3 <----并列排名之后继续递增排序
3       Math       80       3
4       Math       70       5
5       Math       60       6
6       Math       50       7
7       En       90       1
8       En       81       2
9       En       80       3
10       En       80       3
11       En       70       5
12       En       60       6
13       En       50       7
7、总结
语法(用法):
     rank() over([partition by col1] order by col2) 
     dense_rank() over([partition by col1] order by col2) 
     row_number() over([partition by col1] order by col2) 
     其中[partition by col1]可省略。


区别
    三个分析函数都是按照col1分组内从1开始排序
    
    row_number() 是没有重复值的排序(即使两天记录相等也是不重复的),可以利用它来实现分页
    dense_rank() 是连续排序,两个第二名仍然跟着第三名
    rank()       是跳跃拍学,两个第二名下来就是第四名
8、删除表
drop table score

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:149444次
    • 积分:2389
    • 等级:
    • 排名:第16157名
    • 原创:83篇
    • 转载:37篇
    • 译文:1篇
    • 评论:5条
    文章分类
    最新评论