您好,登錄后才能下訂單哦!
分析函數(shù)是什么?
分析函數(shù)是Oracle專門用于
解決復(fù)雜報表統(tǒng)計需求
的功能強大的函數(shù),
它可以在數(shù)據(jù)中進行分組然后計算基于組的某種統(tǒng)計值
,并且每一組的每一行都可以返回一個統(tǒng)計值。
分析函數(shù)和聚合函數(shù)的不同之處是什么?
普通的聚合函數(shù)用group by分組,
每個分組
返回一個統(tǒng)計值,而分析函數(shù)采用partition by分組,并且
每組每行
都可以返回一個統(tǒng)計值。
分析函數(shù)的形式
分析函數(shù)帶有一個開窗函數(shù)over(),包含三個分析子句:分組(partition by), 排序(order by), 窗口(rows) ,他們的使用形式如下:over(partition by xxx order by yyy rows between zzz)。
注:窗口子句在這里我只說rows方式的窗口,range方式和滑動窗口也不提
分析函數(shù)例子(在scott用戶下模擬)
示例目的:顯示各部門員工的工資,并附帶顯示該部分的最高工資。
--顯示各部門員工的工資,并附帶顯示該部分的最高工資。SELECT E.DEPTNO, E.EMPNO, E.ENAME, E.SAL, LAST_VALUE(E.SAL) OVER(PARTITION BY E.DEPTNO ORDER BY E.SAL ROWS --unbounded preceding and unbouned following針對當前所有記錄的前一條、后一條記錄,也就是表中的所有記錄 --unbounded:不受控制的,無限的 --preceding:在...之前 --following:在...之后 BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) MAX_SAL FROM EMP E;
運行結(jié)果:
示例目的:按照deptno分組,然后計算每組值的總和
SELECT EMPNO, ENAME, DEPTNO, SAL, SUM(SAL) OVER(PARTITION BY DEPTNO ORDER BY ENAME) max_sal FROM SCOTT.EMP;
運行結(jié)果:
示例目的:對各部門進行分組,并附帶顯示第一行至當前行的匯總
SELECT EMPNO, ENAME, DEPTNO, SAL, --注意ROWS BETWEEN unbounded preceding AND current row 是指第一行至當前行的匯總 SUM(SAL) OVER(PARTITION BY DEPTNO ORDER BY ENAME ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) max_sal FROM SCOTT.EMP;
運行結(jié)果:
示例目標:當前行至最后一行的匯總
SELECT EMPNO, ENAME, DEPTNO, SAL, --注意ROWS BETWEEN current row AND unbounded following 指當前行到最后一行的匯總 SUM(SAL) OVER(PARTITION BY DEPTNO ORDER BY ENAME ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) max_sal FROM SCOTT.EMP;
運行結(jié)果:
示例目標:當前行的上一行(rownum-1)到當前行的匯總
SELECT EMPNO, ENAME, DEPTNO, SAL, --注意ROWS BETWEEN 1 preceding AND current row 是指當前行的上一行(rownum-1)到當前行的匯總 SUM(SAL) OVER(PARTITION BY DEPTNO ORDER BY ENAME ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) max_sal FROM SCOTT.EMP;
運行結(jié)果:
示例目標: 當前行的上一行(rownum-1)到當前行的下輛行(rownum+2)的匯總
SELECT EMPNO, ENAME, DEPTNO, SAL, --注意ROWS BETWEEN 1 preceding AND 1 following 是指當前行的上一行(rownum-1)到當前行的下輛行(rownum+2)的匯總 SUM(SAL) OVER(PARTITION BY DEPTNO ORDER BY ENAME ROWS BETWEEN 1 PRECEDING AND 2 FOLLOWING) max_sal FROM SCOTT.EMP;
運行結(jié)果:
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。