Hive中的簡單視窗函式應用(TOPN)

2021-08-08 16:13:29 字數 2189 閱讀 4298

說明:

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,比如:有兩條並列第一,下乙個是第二

select empname,empjob,salary,deptno,row_number() over(partition by deptno order

by salary desc ) rank from emp;

//測試原資料

hive topn

achinese98

aenglish90

amath90

dchinese88

cenglish82

cmath98

bmath79

bchinese79

benglish79

zenglish90

zmath89

zchinese80

emath99

eenglish87

denglish90

create

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

'\t';

load data local inpath "/home/user01/grades.txt"

into

table t;

1、row_number

select *,row_number() over (partition by name order

by score desc) as rank from t;

select *,rank() over (partition by name order

by score asc) as rank from t;

select *,dense_rank() over (partition by name order

by score asc) as rank from t;

業務例項:

統計每個學科的前二名

select * from (select *, row_number() over(partition by name order

by score desc) as rank from t )t where rank <=2;

select *,row_number() over () as rank from t rank <=3;

select area, barnd, yuan,  row_number() over (partition by area order

by yuan desc) as rank from

order

where rank <=3;

各地區熱門商品統計

按地區 分組 再按各個商品的銷量進行降序排名

北京 iphone7 70000 1

北京 xiaomi5 60000 2

北京 mate9 50000 3

北京 手機膜 40000 4

… 上海 xiaomi5 70000 1

上海 iphone7 60000 2

上海 mate9 50000 3

上海 手機膜 40000 4

..

HIVE中視窗函式 分組排序

hive row number over 直接排序,10個第1名排名為1到10 select user id,pay time,amont,row number over partition by user id order by amont desc rank from tmp rank over...

easyUI的簡單視窗應用

easyui幫助開發人員省去了js 的編寫,提高了效率 首先,我們要引入easyui所需要的js檔案和css樣式 1.因為easyui是基於jquery的前段框架,所以引入jquery 2.引入基礎的樣式檔案 href js jquery easyui 1.4.1 themes icon.css h...

python中函式的簡單應用

0.list1 2,4,6 list2 1,3,5 將list1和list2合併,並公升序排列 sort 函式是list排序的方法,reverse false是降序true是公升序 預設 list1 2,4,6 list2 1,3,5 list3 list1 list2 list3.sort pri...