成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

超詳細的5個Oracle數據庫分組函數總結

數據庫 Oracle
今天主要分享下Oracle數據庫分組函數group by 、 rollup、cude、grouping 、grouping sets的常用用法,以下以Oracle自帶schema做演示。

概述

今天主要分享下Oracle數據庫分組函數group by 、 rollup、cude、grouping 、grouping sets的常用用法,以下以Oracle自帶schema做演示。

1、group by的使用

--根據DEPTNO和JOB進行分組。求相同DEPTNO,相同JOB的員工工資總和。

  1. SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY E.DEPTNO,E.JOB ORDER BY E.DEPTNO; 
超詳細的5個Oracle數據庫分組函數總結

2、group by 配合rollup的使用

rollup()--可以使用一個或者多個參數。意思是從右向左進行數據的匯總統計,并生成一行,rollup是個統計函數。

以下是根據分組情況進行統計,最終進行全部匯總。

(1)簡單的使用rollup--生成一行新數據。(要生成新的一行數據,還可以使用UNION ALL)

  1. SELECT D.DUMMY FROM DUAL D GROUP BY ROLLUP(D.DUMMY); 

超詳細的5個Oracle數據庫分組函數總結

 

(2)先根據E.DEPTNO,E.JOB進行分組,然后從右向左

  1. SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.DEPTNO,E.JOB) ORDER BY E.DEPTNO; 

超詳細的5個Oracle數據庫分組函數總結

 

針對以上的使用ROLLUP的結果的理解:

a:首先根據GROUP BY E.DEPTNO,E.JOB查詢出9條數據(除4,8,12,13外),在根據rollup的定義,從右向左,對ROLLUP中的參數進行小計

首先根據JOB(對所有的JOB進行匯總),匯總出4,8,12行,在根據E.DEPTNO(對所有的DEPTNO進行匯總),匯總出第十三行數據。

(3) 特殊情況

  1. SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.JOB,E.DEPTNO) ORDER BY E.DEPTNO; 

超詳細的5個Oracle數據庫分組函數總結

 

理解:首先根據GROUP BY E.DEPTNO,E.JOB查詢出前九條數據,其次對E.DEPTNO進行匯總,但是必須考慮JOB,也就是相同的JOB,的所有的工資總和,所以出現下面五條數據。

3、group by 配合cube的使用

  1. SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY CUBE(E.DEPTNO,E.JOB) ORDER BY E.DEPTNO; 

超詳細的5個Oracle數據庫分組函數總結

 

理解:CUBE會對條件中的每一個條件進行單獨的匯總:即對單獨的列進行匯總

GROUP BY CUBE(E.DEPTNO,E.JOB)首先根據:GROUP BY E.DEPTNO,E.JOB查詢數據,其次對E.JOB進行匯總(不考慮DEPTNO,單獨匯總,而ROLLUP是在同一個DEPTNO下面)再對E.DEPTNO進行匯總,最后全部匯總。

  1. cube(a,b) 統計列包含:(a,b)、(a)、(b)、() 
  2. cube(a,b,c) 統計列包含:(a,b,c)、(a,b)、(a,c)、(b,c)、(a)、(b)、(c)、() 

4、GROUPING 的使用

GROUPING函數可以接受一列,返回0或者1。如果列值為空,那么GROUPING()返回1;如果列值非空,那么返回0。GROUPING只能在使用ROLLUP或CUBE的查詢中使用。當需要在返回空值的地方顯示某個值時,GROUPING()就非常有用。

  1. 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; 

超詳細的5個Oracle數據庫分組函數總結

 

可以使用decode或者case函數進行轉換這種不友好的顯示:

  1. SELECT  
  2. CASE WHEN grouping(E.DEPTNO) = 1 
  3. THEN '總計' 
  4. ELSE E.DEPTNO || '' 
  5. END AS 部門, 
  6. CASE WHEN grouping(E.JOB) = 1 AND grouping(E.DEPTNO) = 0 
  7. THEN '小計' 
  8. ELSE E.JOB 
  9. END AS 工作種類, 
  10. SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.DEPTNO,E.JOB) 
  11. ORDER BY E.DEPTNO; 
超詳細的5個Oracle數據庫分組函數總結
  1. SELECT DECODE(GROUPING(E.DEPTNO), 1, '總計', E.DEPTNO) AS 部門, 
  2. CASE 
  3. WHEN GROUPING(E.JOB) = 1 AND GROUPING(E.DEPTNO) = 0 THEN 
  4. '小計' 
  5. ELSE 
  6. E.JOB 
  7. END AS 工作種類, 
  8. SUM(E.SAL) 
  9. FROM EMP E 
  10. GROUP BY ROLLUP(E.DEPTNO, E.JOB) 
  11. ORDER BY E.DEPTNO; 

超詳細的5個Oracle數據庫分組函數總結

5、grouping sets提供了指定匯總集合條件的功能

根據E.DEPTNO,E.JOB分別匯總數據。

  1. SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY GROUPING SETS(E.DEPTNO,E.JOB); 

超詳細的5個Oracle數據庫分組函數總結

 


 

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2019-08-01 07:31:51

數據庫主機日志

2019-10-22 07:50:45

SqlServer數據庫觸發器

2023-02-28 00:01:53

MySQL數據庫工具

2019-09-10 07:58:01

字符集MySQL數據庫

2019-09-11 11:38:30

MySQLInnoDB數據庫

2019-08-20 09:46:14

DBA收藏腳本語言

2019-04-02 10:36:17

數據庫MySQL優化方法

2019-06-18 10:31:23

數據庫端口URL

2017-06-01 15:58:42

Oracle數據庫安全管理

2019-08-20 22:06:32

Oracle數據庫索引

2011-05-26 13:29:30

ORACLE數據庫升級

2010-04-13 10:32:40

Oracle數據庫編程

2010-04-20 10:41:49

Oracle數據庫

2011-04-12 10:09:33

Oracle數據庫關閉

2018-12-12 19:10:01

Oracle數據庫自動備份

2019-07-23 07:52:41

數據庫MySQL優化方法

2011-06-14 15:11:59

ORACLE

2011-09-02 10:06:51

OracleSqlLoad常用技巧

2011-03-17 14:09:25

Oracle數據庫字符

2019-10-16 00:37:36

Oracle數據庫游標數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美性大战久久久久久久蜜臀 | 欧美日韩大陆 | 久久人体视频 | 欧美日韩三级 | 91亚洲国产成人久久精品网站 | 精品欧美视频 | 97碰碰碰| 成人国产一区二区三区精品麻豆 | 国产精品视频在线观看 | 在线免费黄色小视频 | 欧美一级二级三级视频 | 国产剧情一区 | 日本三级网| 久久99精品久久久久久 | 在线国产视频观看 | 成人精品在线观看 | 青青草华人在线视频 | 亚洲精品久久区二区三区蜜桃臀 | 成人妇女免费播放久久久 | 欧美另类日韩 | 亚洲欧洲成人av每日更新 | 欧美一级欧美一级在线播放 | 91在线观看 | 91天堂| 99视频在线播放 | 中文字幕高清视频 | 99在线免费观看视频 | 黄色一级大片在线免费看产 | 久久国产精品久久久久久 | 日韩精品一区二区三区中文在线 | 国产高清性xxxxxxxx | 欧美一级电影免费 | 国产日批 | 亚洲免费视频播放 | 久久国产激情视频 | 亚洲啪啪 | 成人免费视频网站在线观看 | 视频一区二区三区四区五区 | 国产午夜精品一区二区三区嫩草 | 国产av毛片| 国产视频第一页 |