hive 分組排序,topn
語法格式:row_number() over (partition by col1 order by col2 desc ) rank
partition by:類似hive的建表,分割槽的意思;
order by :排序,預設是公升序,加desc降序;
rank:表示別名
表示根據col1分組,在分組內部根據 col2排序,而此函式計算的值就表示每組內部排序後的順序編號(組內連續的唯一的)
-- 分組排序
-- 求某使用者日期最大的3天
select a.* from(
select p_day,muuid,row_number() over(partition by muuid order by p_day) rank
from test
group by p_day,muuid)a
where a.rank <=3;
---- 獲取每天充值數的前3名
select * from(
select p_day,muuid,c row_number over(partition by p_day order by p_day,c desc) ord
from(
select p_day,muuid,count(1) c from test where p_day>'2017-09-09'
group by p_day,muuid
) t1
)t2where ord <= 3;
Hive分組排序取top N
案列 求每個班級每科成績的第1名的學生。樣例資料如下 這個是典型的分組,組內排序求top n的問題,可以利用rank函式來解決。語法如下 rank over partition by col1 order by col2 排序時出現相等的值時會有相同的序列值,但會跳躍的排序,如 1,1,3,4,5,...
分組Top N問題 三 sql及Hive實現
同上篇hadoop mapreduce 實現分組top n介紹一樣,這次學習hive實現分組top n。在資料處理中,經常會碰到這樣乙個場景,對錶資料按照某一字段分組,然後找出各自組內最大的幾條記錄情形。針對這種分組top n問題,我們利用hive mapreduce等多種工具實現一下。對類如下us...
分組Top N 問題
今天面試,面試官給了這樣乙個場景 有兩張表,一張表存放車隊id,班組id,司機id 另一種表存放司機id,運營時間,運營里程 要查詢出7月份每個車隊每個班組裡的 top 3 這就要用到row number 函式 首先按需求建兩張表 create table demo of topn car comp...