Hive分組排序取top N

2021-09-05 10:16:32 字數 951 閱讀 8164

案列:求每個班級每科成績的第1名的學生。

樣例資料如下:

這個是典型的分組,組內排序求top n的問題,可以利用rank函式來解決。語法如下:

rank() over([partition by col1] order by col2)  :排序時出現相等的值時會有相同的序列值,但會跳躍的排序,如:1,1,3,4,5,5,7

相同的功能的函式語法:

dense_rank() over([partition by col1] order by col2)  :排序時出現相等的值時會有相同的序列值,但不會跳躍的排序,如:1,1,2,3,4,4,5

row_number() over([partition by col1] order by col2) :排序時出現相等的值時會有不同的序列值,相同項按照順序排序,如:1,2,3,4,5

建表:create external table score (name string,subject string,score string,class string) row format delimited  fields terminated by ' ' location '/score'

hql:

select name,subject,score,class from (

select name,subject,score,class,rank() over (partition by class,subject order by score desc) as rank 

from score) score_tmp 

where rank=1;

結果如下:

hive 分組排序,topN

hive 分組排序,topn 語法格式 row number over partition by col1 order by col2 desc rank partition by 類似hive的建表,分割槽的意思 order by 排序,預設是公升序,加desc降序 rank 表示別名 表示根據c...

Hive多欄位分組取Top N且保留某列不相同記錄

一 問題背景 1.先吐槽一下中國聯通自己的大資料開放能力平台提供的計算集群,hive用的1.1,spark用的1.5,kafka0.8,我的天吶,原始的讓人抓狂,好多已經寫好的模型都要重寫.2.資料格式 第一列是device number,第二列是prod name,第三列是score,第四列是fl...

分組Top N問題 三 sql及Hive實現

同上篇hadoop mapreduce 實現分組top n介紹一樣,這次學習hive實現分組top n。在資料處理中,經常會碰到這樣乙個場景,對錶資料按照某一字段分組,然後找出各自組內最大的幾條記錄情形。針對這種分組top n問題,我們利用hive mapreduce等多種工具實現一下。對類如下us...