您好,登錄后才能下訂單哦!
這篇文章給大家介紹Oracle數據庫中有哪些分組函數,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
--根據DEPTNO和JOB進行分組。求相同DEPTNO,相同JOB的員工工資總和。
SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY E.DEPTNO,E.JOB ORDER BY E.DEPTNO;
rollup()--可以使用一個或者多個參數。意思是從右向左進行數據的匯總統計,并生成一行,rollup是個統計函數。
以下是根據分組情況進行統計,最終進行全部匯總。
(1)簡單的使用rollup--生成一行新數據。(要生成新的一行數據,還可以使用UNION ALL)
SELECT D.DUMMY FROM DUAL D GROUP BY ROLLUP(D.DUMMY);
(2)先根據E.DEPTNO,E.JOB進行分組,然后從右向左
SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.DEPTNO,E.JOB) ORDER BY E.DEPTNO;
針對以上的使用ROLLUP的結果的理解:
a:首先根據GROUP BY E.DEPTNO,E.JOB查詢出9條數據(除4,8,12,13外),在根據rollup的定義,從右向左,對ROLLUP中的參數進行小計
首先根據JOB(對所有的JOB進行匯總),匯總出4,8,12行,在根據E.DEPTNO(對所有的DEPTNO進行匯總),匯總出第十三行數據。
(3) 特殊情況
SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.JOB,E.DEPTNO) ORDER BY E.DEPTNO;
理解:首先根據GROUP BY E.DEPTNO,E.JOB查詢出前九條數據,其次對E.DEPTNO進行匯總,但是必須考慮JOB,也就是相同的JOB,的所有的工資總和,所以出現下面五條數據。
SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY CUBE(E.DEPTNO,E.JOB) ORDER BY E.DEPTNO;
理解:CUBE會對條件中的每一個條件進行單獨的匯總:即對單獨的列進行匯總
GROUP BY CUBE(E.DEPTNO,E.JOB)首先根據:GROUP BY E.DEPTNO,E.JOB查詢數據,其次對E.JOB進行匯總(不考慮DEPTNO,單獨匯總,而ROLLUP是在同一個DEPTNO下面)再對E.DEPTNO進行匯總,最后全部匯總。
cube(a,b) 統計列包含:(a,b)、(a)、(b)、() cube(a,b,c) 統計列包含:(a,b,c)、(a,b)、(a,c)、(b,c)、(a)、(b)、(c)、()
GROUPING函數可以接受一列,返回0或者1。如果列值為空,那么GROUPING()返回1;如果列值非空,那么返回0。GROUPING只能在使用ROLLUP或CUBE的查詢中使用。當需要在返回空值的地方顯示某個值時,GROUPING()就非常有用。
SELECT GROUPING(E.DEPTNO), E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.DEPTNO,E.JOB) ORDER BY E.DEPTNO;
可以使用decode或者case函數進行轉換這種不友好的顯示:
SELECT CASE WHEN grouping(E.DEPTNO) = 1 THEN '總計' ELSE E.DEPTNO || '' END AS 部門, CASE WHEN grouping(E.JOB) = 1 AND grouping(E.DEPTNO) = 0 THEN '小計' ELSE E.JOB END AS 工作種類, SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.DEPTNO,E.JOB) ORDER BY E.DEPTNO;
SELECT DECODE(GROUPING(E.DEPTNO), 1, '總計', E.DEPTNO) AS 部門, CASE WHEN GROUPING(E.JOB) = 1 AND GROUPING(E.DEPTNO) = 0 THEN '小計' ELSE E.JOB END AS 工作種類, SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.DEPTNO, E.JOB) ORDER BY E.DEPTNO;
根據E.DEPTNO,E.JOB分別匯總數據。
SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY GROUPING SETS(E.DEPTNO,E.JOB);
關于Oracle數據庫中有哪些分組函數就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。