SQL grouping sets 子句
SQL grouping sets 子句
grouping sets子句允許你指定多個group by 選項。增強了group by 的功能。
可以透過一條select 語句實現複雜繁瑣的多條select 語句的查詢。並且更加的
高效,解析儲存一條SQL於語句。下面透過使用grouping sets 子句與沒有
使用grouping sets 子句來對比學習該子句。
查詢每個部門的每類工作的平均工資,使用grouping sets的語句。
SQL> select department_id,job_id,avg(salary)
2 from hr.employees
3 group by grouping sets ((department_id,job_id));
DEPARTMENT_ID JOB_ID AVG(SALARY)
------------- ---------- -----------
110 AC_ACCOUNT 8300
80 SA_REP 7909.09091
90 AD_VP 17000
50 ST_CLERK 2785
110 AC_MGR 12000
50 ST_MAN 7280
80 SA_MAN 12200
50 SH_CLERK 3215
沒有使用grouping sets 的對等語句。
SQL> select department_id,job_id,avg(salary)
2 from hr.employees
3 group by department_id,job_id;
DEPARTMENT_ID JOB_ID AVG(SALARY)
------------- ---------- -----------
110 AC_ACCOUNT 8300
80 SA_REP 7909.09091
90 AD_VP 17000
50 ST_CLERK 2785
110 AC_MGR 12000
50 ST_MAN 7280
80 SA_MAN 12200
50 SH_CLERK 3215
再查詢每個部門每類工作平均工資的基礎上,還要查詢出每個部門的平均工資。使用grouping sets的語句。
SQL> select department_id,job_id,avg(salary)
2 from hr.employees
3 group by grouping sets ((department_id,job_id),department_id);
DEPARTMENT_ID JOB_ID AVG(SALARY)
------------- ---------- -----------
10 AD_ASST 4400#每個部門每類工作的平均工資。
10 4400#每個部門的平均工資。
20 MK_MAN 13000
20 MK_REP 6000
20 9500
30 PU_MAN 11000
30 PU_CLERK 2780
30 4150
40 HR_REP 6500
沒有使用grouping sets 的對等語句。
SQL> select department_id,job_id,avg(salary)
2 from hr.employees
3 group by (department_id,job_id)
4 union
5 select department_id,null,avg(salary)
6 from hr.employees
7 group by department_id;
DEPARTMENT_ID JOB_ID AVG(SALARY)
------------- ---------- -----------
10 AD_ASST 4400
10 4400
20 MK_MAN 13000
20 MK_REP 6000
20 9500
30 PU_CLERK 2780
30 PU_MAN 11000
30 4150
40 HR_REP 6500
SQL> select department_id,job_id,avg(salary)
2 from hr.employees
3 group by grouping sets ((department_id,job_id),department_id,());
DEPARTMENT_ID JOB_ID AVG(SALARY)
------------- ---------- -----------
10 AD_ASST 4400
10 4400
20 MK_MAN 13000
20 MK_REP 6000
20 9500
30 PU_MAN 11000
30 PU_CLERK 2780
再查詢每個部門每類工作平均工資與查詢出每個部門的平均工資的基礎上,還要查詢整個企業中僱員的平均工資。使用grouping sets的語句。
SQL> select department_id,job_id,avg(salary)
2 from hr.employees
3 group by grouping sets ((department_id,job_id),department_id,()); #() 表示做一個整體的聚集。
DEPARTMENT_ID JOB_ID AVG(SALARY)
------------- ---------- -----------
10 AD_ASST 4400
10 4400
20 MK_MAN 13000
20 MK_REP 6000
20 9500
30 PU_MAN 11000
30 PU_CLERK 2780
。
。
。
6380.90909 #這一行查詢的是整個employees 中僱員總的平均工資。
沒有使用grouping sets 的對等語句。
SQL> select department_id,job_id,avg(salary)
2 from hr.employees
3 group by (department_id,job_id)
4 union
5 select department_id,null,avg(salary)
6 from hr.employees
7 group by department_id
8 union
9 select null,null,avg(salary)
10 from hr.employees;
DEPARTMENT_ID JOB_ID AVG(SALARY)
------------- ---------- -----------
10 AD_ASST 4400
10 4400
20 MK_MAN 13000
20 MK_REP 6000
20 9500
30 PU_CLERK 2780
30 PU_MAN 11000
30 4150
40 HR_REP 6500
。
。
。
6380.90909 #這一行查詢的是整個employees 中僱員總的平均工資。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26110315/viewspace-720291/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle OCP(13):GROUPING & GROUPING_ID & GROUP_ID & GROUPING SETSOracle
- 解析數倉OLAP函式:ROLLUP、CUBE、GROUPING SETS函式
- SQL groupingSQL
- SQL中 where 子句和having子句中的區別SQL
- SQL之limit子句的使用SQLMIT
- 【學習】SQL基礎-005-group by子句SQL
- 7.99 GROUPING
- SQL語句各子句的執行順序SQL
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:REPLICA ON子句SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:LISTENER子句SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:DATABASE子句SQLServerDatabase
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:AVAILABILITY GROUP ON子句SQLServerAI
- 7.100 GROUPING_ID
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:ENDPOINT_URL子句SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:SECONDARY_ROLE子句SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:PRIMARY_ROLE子句SQLServer
- Equivalent Sets(HDU-3836)UI
- 詳解SQL中Groupings Sets 語句的功能和底層實現邏輯SQL
- SQL server資料庫with as子句與遞迴查詢的實現SQLServer資料庫遞迴
- DMSQL TOP子句SQL
- DMSQL WITH FUNCTION子句SQLFunction
- 【解決DML 語句包含不帶 INTO 子句的 OUTPUT 子句】
- postgreSQL with子句學習SQL
- HAVING子句的力量
- SQLite中的WHERE子句SQLite
- 2.5.11.1 使用 FORCE LOGGING 子句
- SQLite中的FROM子句SQLite
- SQLite中的SELECT子句SQLite
- Kubernetes Replica Sets 和 Kubernetes Replica Controller的區別Controller
- PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation3DSegmentation
- mongodb複製集(replica sets)+分片(sharding)環境搭建MongoDB
- Dual Differential Grouping: A More General Decomposition Method for Large-Scale Optimization
- SQLite中的SELECT子句使用表示式SQLite
- SQLite中的SELECT子句使用別名SQLite
- Python檔案操作:finally子句的使用Python
- MySQL中BETWEEN子句的用法詳解MySql
- 詳解MySQL中WHERE子句的用法MySql
- All calls to Java have to go via JavaCalls. Sets up the stack frameJavaGo
- mssql sqlserver 關鍵字 GROUPING用法簡介及說明SQLServer