Hive 函数之 Rank 函数案例
文章目錄
- 函數(shù)說明
- 數(shù)據(jù)準(zhǔn)備
- 需求
- 創(chuàng)建本地 score.txt,導(dǎo)入數(shù)據(jù)
- 創(chuàng)建 hive 表并導(dǎo)入數(shù)據(jù)
- 按需求查詢數(shù)據(jù)
- rank() 方式查詢
- dense_rank() 方式查詢
- row_number() 查詢
首先rank() 是一個(gè)排名函數(shù),
函數(shù)說明
rank() 排名的時(shí)候,排序相同會(huì)重復(fù),但總數(shù)不變
dense_rank() 排序相同時(shí)會(huì)重復(fù),但是總數(shù)會(huì)減少
row_number() 會(huì)根據(jù)順序計(jì)算,值一樣,也不會(huì)出現(xiàn)重復(fù)排序
數(shù)據(jù)準(zhǔn)備
| 孫悟空 | 語文 | 87 |
| 孫悟空 | 數(shù)學(xué) | 95 |
| 孫悟空 | 英語 | 68 |
| 大海 | 語文 | 94 |
| 大海 | 數(shù)學(xué) | 56 |
| 大海 | 英語 | 84 |
| 宋宋 | 語文 | 64 |
| 宋宋 | 數(shù)學(xué) | 86 |
| 宋宋 | 英語 | 84 |
| 婷婷 | 語文 | 65 |
| 婷婷 | 數(shù)學(xué) | 85 |
| 婷婷 | 英語 | 78 |
需求
計(jì)算每門學(xué)科成績排名。
創(chuàng)建本地 score.txt,導(dǎo)入數(shù)據(jù)
vim score.txt 孫悟空 語文 87 孫悟空 數(shù)學(xué) 95 孫悟空 英語 68 大海 語文 94 大海 數(shù)學(xué) 56 大海 英語 84 宋宋 語文 64 宋宋 數(shù)學(xué) 86 宋宋 英語 84 婷婷 語文 65 婷婷 數(shù)學(xué) 85 婷婷 英語 78創(chuàng)建 hive 表并導(dǎo)入數(shù)據(jù)
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;按需求查詢數(shù)據(jù)
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;結(jié)果如下
我們發(fā)現(xiàn),英語部分,有兩個(gè)相同的分?jǐn)?shù),大海和松松,英語84,并列第一,且宋宋在大海的后面,發(fā)現(xiàn)rank 排名, 宋宋后面的婷婷,直接是第三,由此得知,rank() 是跳躍式排名,總數(shù)保持不變
dense_rank() 方式查詢
select *,dense_rank() over(partition by subject order by score desc) as rank from score;結(jié)果如下
由此圖可發(fā)現(xiàn),英語科目,大海和宋宋還是并列第一,但是婷婷卻變成了第二,孫悟空第三,
由此可見,dense_rank() 函數(shù) ,非跳躍式排名,影響了總數(shù),因?yàn)橐还菜膫€(gè)人,卻成了三個(gè)
row_number() 查詢
select *,row_number() over(partition by subject order by score desc) as rank from score;結(jié)果如下
我們看到 大海和宋宋,英語雖然都是 84分,但是兩人卻排了名次, 第一和第二,由此可見,row_number() 會(huì)根據(jù)順序計(jì)算,值一樣,也不會(huì)出現(xiàn)重復(fù)排序,
總結(jié)
以上是生活随笔為你收集整理的Hive 函数之 Rank 函数案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MinIO分布式文件服务器搭建与入门
- 下一篇: 黯夜伤