Hive 函数之 Rank 函数案例
生活随笔
收集整理的這篇文章主要介紹了
Hive 函数之 Rank 函数案例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 函數說明
- 數據準備
- 需求
- 創建本地 score.txt,導入數據
- 創建 hive 表并導入數據
- 按需求查詢數據
- rank() 方式查詢
- dense_rank() 方式查詢
- row_number() 查詢
首先rank() 是一個排名函數,
函數說明
rank() 排名的時候,排序相同會重復,但總數不變
dense_rank() 排序相同時會重復,但是總數會減少
row_number() 會根據順序計算,值一樣,也不會出現重復排序
數據準備
| 孫悟空 | 語文 | 87 |
| 孫悟空 | 數學 | 95 |
| 孫悟空 | 英語 | 68 |
| 大海 | 語文 | 94 |
| 大海 | 數學 | 56 |
| 大海 | 英語 | 84 |
| 宋宋 | 語文 | 64 |
| 宋宋 | 數學 | 86 |
| 宋宋 | 英語 | 84 |
| 婷婷 | 語文 | 65 |
| 婷婷 | 數學 | 85 |
| 婷婷 | 英語 | 78 |
需求
計算每門學科成績排名。
創建本地 score.txt,導入數據
vim score.txt 孫悟空 語文 87 孫悟空 數學 95 孫悟空 英語 68 大海 語文 94 大海 數學 56 大海 英語 84 宋宋 語文 64 宋宋 數學 86 宋宋 英語 84 婷婷 語文 65 婷婷 數學 85 婷婷 英語 78創建 hive 表并導入數據
create table score( name string, subject string, score int) row format delimited fields terminated by "\t";load data local inpath '/opt/hive/data/score.txt' into table score;按需求查詢數據
select t1.name, t1.subject, t1.score, rank() over(partition by t1.subject order by t1.score desc) rank1, dense_rank() over(partition by t1.subject order by t1.score desc) rank2, row_number() over(partition by t1.subject order by t1.score desc) rank3 from score t1;rank() 方式查詢
select *,rank() over(partition by subject order by score desc) as rank from score;結果如下
我們發現,英語部分,有兩個相同的分數,大海和松松,英語84,并列第一,且宋宋在大海的后面,發現rank 排名, 宋宋后面的婷婷,直接是第三,由此得知,rank() 是跳躍式排名,總數保持不變
dense_rank() 方式查詢
select *,dense_rank() over(partition by subject order by score desc) as rank from score;結果如下
由此圖可發現,英語科目,大海和宋宋還是并列第一,但是婷婷卻變成了第二,孫悟空第三,
由此可見,dense_rank() 函數 ,非跳躍式排名,影響了總數,因為一共四個人,卻成了三個
row_number() 查詢
select *,row_number() over(partition by subject order by score desc) as rank from score;結果如下
我們看到 大海和宋宋,英語雖然都是 84分,但是兩人卻排了名次, 第一和第二,由此可見,row_number() 會根據順序計算,值一樣,也不會出現重復排序,
總結
以上是生活随笔為你收集整理的Hive 函数之 Rank 函数案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MinIO分布式文件服务器搭建与入门
- 下一篇: 黯夜伤