Hive排序函數


@

排名函數

注意排名函數可以跟Over(),但是不能定義window_clause。在計算名次前,需要先排序!

  • RANK: 允許並列,一旦有並列跳號!
  • ROW_NUMBER: 行號! 連續的,每個號之間差1!
  • DENSE_RANK: 允許並列,一旦有並列不跳號!
  • CUME_DIST: 從排序后的第一行到當前值之間數據 占整個數據集的百分比!
  • PERCENT_RANK: rank-1/ 總數據量-1
  • NTILE(x): 將數據集均分到X個組中,返回每條記錄所在的組號
select  *,rank() over(order by score) ranknum,
ROW_NUMBER() over(order by score) rnnum,
DENSE_RANK() over(order by score) drnum,
CUME_DIST() over(order by score) cdnum,
PERCENT_RANK() over(order by score) prnum
from score

在這里插入圖片描述

練習

表及字段:score.name | score.subject | score.score

  1. 按照科目進行排名
select *,rank() over(partition by subject order by score desc)
from score

在這里插入圖片描述
2. 給每個學生的總分進行排名

select name,sumscore,rank()  over( order by sumscore desc)
from
(select name,sum(score) sumscore
from  score
group by  name) tmp

在這里插入圖片描述
3. 求每個學生的成績明細及給每個學生的總分和總分排名

select *,DENSE_RANK() over(order by tmp.sumscore desc)
from
(select *,sum(score) over(partition by name)  sumscore
from score) tmp

在這里插入圖片描述
4. 只查詢每個科目的成績的前2名

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

在這里插入圖片描述
5. 查詢學生成績明細,並顯示當前科目最高分

select *,max(score) over(partition by subject)
from score
# 或
select *,FIRST_VALUE(score) over(partition by subject order by score desc)
from score

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM