日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hive 函数之 Rank 函数案例

發布時間:2023/12/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hive 函数之 Rank 函数案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 函數說明
  • 數據準備
  • 需求
  • 創建本地 score.txt,導入數據
  • 創建 hive 表并導入數據
  • 按需求查詢數據
    • rank() 方式查詢
    • dense_rank() 方式查詢
    • row_number() 查詢

首先rank() 是一個排名函數,

函數說明

rank() 排名的時候,排序相同會重復,但總數不變
dense_rank() 排序相同時會重復,但是總數會減少
row_number() 會根據順序計算,值一樣,也不會出現重復排序

數據準備

namesubjectscore
孫悟空語文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 函数案例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。