91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hive如何分組取Top N

發布時間:2021-12-10 11:47:13 來源:億速云 閱讀:449 作者:小新 欄目:大數據

小編給大家分享一下Hive如何分組取Top N,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Hive分組取Top N

Hive在0.11.0版本開始加入了row_number、rank、dense_rank分析函數,可以查詢分組排序后的top值

使用規則:

row_number() over ([partition col1] [order by col2] )

rank() over ( [partition col1] [order by col2] )

dense_rank() over ( [partition col1] [order by col2] )

它們都是根據col1字段分組,然后對col2字段進行排序,對排序后的每行生成一個行號,這個行號從1開始遞增

col1、col2都可以是多個字段,用','分隔

區別

1)row_number:不管col2字段的值是否相等,行號一直遞增, 比如:有兩條記錄的值相等,但一個是第一,一個是第二

2)rank:上下兩條記錄的col2相等時,記錄的行號是一樣的,但下一個col2值的行號遞增N(N是重復的次數),比如:有兩條并列第一,下一個是第三,沒有第二

3)dense_rank:上下兩條記錄的col2相等時,下一個col2值的行號遞增1,  比如:有兩條并列第一,下一個是第二

row_number可以實現分頁查詢

實際操作

創建表

create table t(name string, sub string, score int) row format delimited fields terminated by '\t';

數據在附件的a.txt里

a    chinese    98
a    english    90
d    chinese    88
c    english    82
c    math    98
b    math    89
b    chinese    79
z    english    90
z    math    89
z    chinese    80
e    math    99
e    english    87
d    english    90

加載數據
load data local inpath '/home/hadoop/hive-example/a.txt' into table tb4;

分組排序

--row_number
select *, row_number() over (partition by sub order by score) as od from t; 

--rank
select *, rank() over (partition by sub order by score) as od from t; 

--dense_ran
select *, dense_rank() over (partition by sub order by score desc) from t;

業務實例

--統計每個學科的前三名
select * from (select *, row_number() over (partition by sub order by score desc) as od from t ) t where od<=3;

--語文成績是80分的排名是多少
select od from (select *, row_number() over (partition by sub order by score desc) as od from t ) t where sub='chinese' and score=80;

--分頁查詢
select * from (select *, row_number() over () as rn from t) t1 where rn between 1 and 5;

以上是“Hive如何分組取Top N”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄂尔多斯市| 大悟县| 濮阳市| 专栏| 凯里市| 广丰县| 科技| 云南省| 本溪市| 丹巴县| 利辛县| 合阳县| 繁昌县| 溆浦县| 彭州市| 丰宁| 页游| 阳泉市| 绥芬河市| 武宁县| 安康市| 旬邑县| 清水河县| 永春县| 嫩江县| 盱眙县| 凌海市| 永安市| 太原市| 威信县| 环江| 富顺县| 庐江县| 洪泽县| 民丰县| 仁布县| 海伦市| 庆云县| 虎林市| 宕昌县| 济阳县|