当前位置:   article > 正文

Hive排名函数_hive 排名

hive 排名

v2-4b22527985384cedba02ae95e6d244cc_250x0

排名函数

第一种函数:row_number从1开始,按照顺序,生成分组内记录的序列,row_number()的值不会存在重复,当排序的值相同时,按照表中记录的顺序进行排列

  1. 效果如下:
  2. 98 1
  3. 97 2
  4. 97 3
  5. 96 4
  6. 95 5
  7. 95 6
  8. 没有并列名次情况,顺序递增

第二种函数:RANK() 生成数据项在分组中的排名,排名相等会在名次中留下空位

  1. 效果如下:
  2. 98 1
  3. 97 2
  4. 97 2
  5. 96 4
  6. 95 5
  7. 95 5
  8. 94 7
  9. 有并列名次情况,顺序跳跃递增

第三种函数:DENSE(但是)_RANK() 生成数据项在分组中的排名,排名相等会在名次中不会留下空位

  1. 效果如下:
  2. 98 1
  3. 97 2
  4. 97 2
  5. 96 3
  6. 95 4
  7. 95 4
  8. 94 5
  9. 有并列名次情况,顺序递增

准备数据

  1. userid classno score
  2. 1 qf1808 80
  3. 2 qf1808 92
  4. 3 qf1808 84
  5. 4 qf1808 86
  6. 5 qf1808 88
  7. 6 qf1808 70
  8. 7 qf1808 98
  9. 8 qf1808 84
  10. 9 qf1808 86
  11. 10 qf1807 90
  12. 11 qf1807 92
  13. 12 qf1807 84
  14. 13 qf1807 86
  15. 14 qf1807 88
  16. 15 qf1807 80
  17. 16 qf1807 92
  18. 17 qf1807 84
  19. 18 qf1807 86
  20. 19 qf1805 80
  21. 20 qf1805 92
  22. 21 qf1805 94
  23. 22 qf1805 86
  24. 23 qf1805 88
  25. 24 qf1805 80
  26. 25 qf1805 92
  27. 26 qf1805 94
  28. 27 qf1805 86
  1. create table if not exists stu_score(
  2. userid int,
  3. classno string,
  4. score int
  5. )
  6. row format delimited
  7. fields terminated by ' ';
  8. load data local inpath './data/stu_score.txt' overwrite into table stu_score;

需求1:对每次考试按照考试成绩倒序

  1. select *,
  2. row_number() over(partition by classno order by score desc) rn1
  3. from stu_score;
  4. select *,
  5. rank() over(partition by classno order by score desc) rn2
  6. from stu_score;
  7. select *,
  8. dense_rank() over(distribute by classno sort by score desc) rn3
  9. from stu_score;
  10. select *,
  11. dense_rank() over(order by score desc) `全年级排名`
  12. from stu_score;

需求2:获取每次考试的排名情况

  1. select *,
  2. -- 没有并列,相同名次依顺序排
  3. row_number() over(distribute by classno sort by score desc) rn1,
  4. -- rank():有并列,相同名次空位
  5. rank() over(distribute by classno sort by score desc) rn2,
  6. -- dense_rank():有并列,相同名次不空位
  7. dense_rank() over(distribute by classno sort by score desc) rn3
  8. from stu_score;

需求3:求每个班级的前三名

  1. select *
  2. from
  3. (
  4. select *,
  5. row_number() over(partition by classno order by score desc) rn1
  6. from stu_score
  7. ) A
  8. where rn1 < 4;

更多大数据精彩内容欢迎B站搜索“千锋教育”或者扫码领取全套资料   

 

【千锋教育】大数据开发全套教程,史上最全面的大数据学习视频

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/558603
推荐阅读
相关标签
  

闽ICP备14008679号