hive的分析函式

2021-10-05 13:09:59 字數 2590 閱讀 2750

1、rollup:group by 的增強函式

實現根據部門號、工作職位求工資總和,根據部門求工資總和,查所有人的工資總和

通過group by 語句的增加來實現:

select deptno,job,sum(sal)

from emp 

group by rollup(deptno,job);

語法:group by rollup(a,b) = group by a,b

+group by a

+不分組

測試oracle

測試hive

2、over(開窗引數)開窗函式

本質:就是乙個「分組函式」,可以返回多個值

引數:unbounded:指定哪些資料進入視窗

preceding:在...之前,用法:unbounded preceding:表示:分組後的第一行

following:在...之後,用法:unbounded following:表示:分組後的最後一行

current row:分組後的當前行

舉例:求部門進行分組,求:員工號、姓名、部門號,薪水,每個部門的第一行到當前行的工資總和

select empno,ename,deptno,sal,

sum(sal) 

over(partition by deptno order by sal

rows between unbounded preceding and current row )

from emp;

我認為該語句其實是這樣

select empno,ename,deptno,sal from emp;這句sql語句可以查出所有的行,但是我還想使用開窗函式求出乙個分組,

分組後的sum(sal)是分組後的第一行到當前行的合計sal之

所以使用到了over,引數中partition  by設定了開窗條件(其實就是分組),order by 在視窗中排序,每行的計算格式

當然我們也可以把看到的視窗打亂使用窗外排序,但它計算的時候還是使用視窗來計算的

行號: oracle中有乙個偽列:rownum(一般不建議使用)

row_number():對部門進行分組,按照薪水排序,並顯示該員工在部門中的序號

select empno,ename,deptno,sal,

row_number() over(partition by deptno order by sal) 序號

rank(): 考慮了重複的記錄,序號可能不連續

select empno,ename,deptno,sal,

rank() over(partition by deptno order by sal) 序號

from emp;       

dense_rank():考慮了重複的記錄,序號連續

select empno,ename,deptno,sal,

dense_rank() over(partition by deptno order by sal) 序號

from emp;

lag:滯後,把某個列往後錯行

lead,提前,把某個列往前提行

按照薪水:

select empno,ename,deptno,sal,

lag(sal,2) over(partition by deptno order by sal) 滯後,

lead(sal,2) over(partition by deptno order by sal) 提前

first_value:取分組後的第一行

last_value:取分組後的最後一行

select empno,ename,deptno,sal,

first_value(sal) over(partition by deptno order by sal 

rows between unbounded preceding and unbounded following) 第一行,

last_value(sal) over(partition by deptno order by sal 

rows between unbounded preceding and unbounded following) 最後一行                          

from emp;

分析函式hive計算均值 Hive 分析函式

應用場景 1 用於分割槽排序 2 top n 3 層次查詢 常用分析函式 分析函式 描述 rank 返回資料項在分割槽中的排名。排名值序列可能會有間隔 dense rank 返回資料項在分割槽中的排名。排名值序列是連續的,沒有間隔 percent rank 計算當前行的百分比排名 x 1 視窗分割槽...

Hive的分析函式

記錄下hive的常用函式 hive的常用函式和平常我們使用的關係型資料庫基本都差不多,這裡只是記錄一下,方便後面回顧。準備測試資料.hadoop hadoop apache hive 0.13.1 bin cat emp.txt 7369 smith clerk 7902 1980 12 17 80...

hive分析函式

遇到以下問題如何解決?查詢客戶各個日期的歷史累積購買金額 查詢每個客戶第一次 首購 或前n次購買記錄 查詢每個客戶最後一次購買記錄 某活動推廣後,每天的累積資料 查詢客戶每天的歷史累積購買金額 hive 語法 select userid user id,pay datekey pay datekey...