天天看點

mysql max函數_Hive的分析函數的學習

我們先準備資料庫、表和資料

mysql max函數_Hive的分析函數的學習
mysql max函數_Hive的分析函數的學習
mysql max函數_Hive的分析函數的學習

開窗分析函數相對于mysql中的聚合函數差別是:分析函數是基于某個組多個資料進行計算聚合,而聚合函數是每個組傳回一行資料。

官網

mysql max函數_Hive的分析函數的學習
mysql max函數_Hive的分析函數的學習
mysql max函數_Hive的分析函數的學習

我們先做個例子感受下:

要求: 查詢部門編号為10的所有的員工,按照薪資降序排序

Mysql實作:select empno,ename,deptno,sal from emp where deptno=10 order by sal desc;

mysql max函數_Hive的分析函數的學習

如果要求是:将每個部門薪資最高的那個人的薪資顯示在最後一行。

select empno,ename,deptno,sal, max(sal) over(partition by deptno order by sal desc) as sal_max from emp;

mysql max函數_Hive的分析函數的學習
mysql max函數_Hive的分析函數的學習

我們看官網這個位置

mysql max函數_Hive的分析函數的學習
mysql max函數_Hive的分析函數的學習

我們來解釋裡面的概念

目前有一個資料

mysql max函數_Hive的分析函數的學習

CURRENT ROW

mysql max函數_Hive的分析函數的學習

UNBOUNDED PRECEDING 初始行

PRECEDING 前一行

CURRENT ROW 目前行

FOLLOWING 後一行

UNBOUNDED FOLLOWING 最後一行

mysql max函數_Hive的分析函數的學習

是以上面的語句我們變動下

select empno,ename,deptno,sal, max(sal) over(partition by deptno order by sal desc ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as sal_max from emp;

可以控制視窗大小

mysql max函數_Hive的分析函數的學習

結果是一樣的,但是視窗大小我們做了變化

mysql max函數_Hive的分析函數的學習

我們準備資料

mysql max函數_Hive的分析函數的學習

建立一個表

mysql max函數_Hive的分析函數的學習
mysql max函數_Hive的分析函數的學習

載入資料

load data local inpath '/data/hivetest/anal.txt' into table analytical;

mysql max函數_Hive的分析函數的學習

語句1:

mysql max函數_Hive的分析函數的學習
mysql max函數_Hive的分析函數的學習

我們看結果

mysql max函數_Hive的分析函數的學習

語句2

mysql max函數_Hive的分析函數的學習
mysql max函數_Hive的分析函數的學習
mysql max函數_Hive的分析函數的學習

語句3

mysql max函數_Hive的分析函數的學習
mysql max函數_Hive的分析函數的學習

語句4

mysql max函數_Hive的分析函數的學習
mysql max函數_Hive的分析函數的學習

語句5

mysql max函數_Hive的分析函數的學習
mysql max函數_Hive的分析函數的學習

語句6

mysql max函數_Hive的分析函數的學習
mysql max函數_Hive的分析函數的學習

已上是視窗和基本語句的使用。

我們來看ROW_NUMBER

mysql max函數_Hive的分析函數的學習

将每個部門薪資最高的那個人的薪資降序排序并且顯示唯一的編号ROW_NUMBER

mysql max函數_Hive的分析函數的學習
mysql max函數_Hive的分析函數的學習

擷取每個部門薪資最高的前兩位(嵌套子查詢)

mysql max函數_Hive的分析函數的學習
mysql max函數_Hive的分析函數的學習