Hive:数据查询(8.排名函数及案例)

文章目录

  • 1.理论
  • 2.案例练习
    • 2.1 题目
    • 2.2 练习1:按照科目进行排名
    • 2.3 练习2:给每个学生的总分进行排名
    • 2.4 练习3:只查询每个科目的成绩的前2名
    • 2.5 练习4:查询学生成绩,并显示当前科目最高分,并显示当前科目最低分

1.理论

  • RANK():允许并列,并列后跳号
  • ROW_NUMBER(): 连续,不并列,不跳号
  • DENSE_RANK(): 连续,允许并列,并列不跳号!
  • CUME_DIST(): 当前值以上的所有的值,占总数据集的比例!
  • PERCENT_RANK(): rank()-1/总数据集-1
  • NTILE(x): 将窗口中的数据平均分配到x个组中,返回当前数据的组号

排名函数可以跟over(),但是不能在over()中定义window_clause

先排序,再排名

测试:

select *,
rank() over(order by score desc) ranknum,
ROW_NUMBER() over(order by score desc) rownum,
DENSE_RANK() over(order by score desc) densenum,
CUME_DIST() over(order by score desc) cume_distnum,
PERCENT_RANK() over(order by score desc) percentnum
from score

2.案例练习

2.1 题目

// 按照科目进行排名
// 给每个学生的总分进行排名
// 只查询每个科目的成绩的前2名
// 查询学生成绩,并显示当前科目最高分
// 查询学生成绩,并显示当前科目最低分

2.2 练习1:按照科目进行排名

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

2.3 练习2:给每个学生的总分进行排名

select name,sumScore,rank() over(order by sumScore desc)
from
(select name,sum(score) sumScore
from score
group by name)t

2.4 练习3:只查询每个科目的成绩的前2名

select *
from 
(select *,rank() over(partition by subject order by score desc) rn
from score)t
where rn<=2

2.5 练习4:查询学生成绩,并显示当前科目最高分,并显示当前科目最低分

select *,max(score) over(partition by subject) maxScore,
min(score) over(partition by subject) minScore
from score

你可能感兴趣的:(bigdata,hive)