SQL之17深入group by
ROLLUP在GROUP BY中的使用
SELECT department_id, job_id,SUM(salary)
FROM employees
WHERE department_id < 60
GROUP BY ROLLUP(department_id, job_id);
DEPTNO JOB AVG(SAL)
------- --------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 2916.66667
20 CLERK 950
20 ANALYST 3000
20 MANAGER 2975
20 1968.75
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 1400
30 1566.66667
40
40
50
50 ANALYST 3000
50 3000
2073.21429
結果:除了分組外,還加上按DEPTNO的小計
cube在GROUP BY中的使用
SQL> /
DEPTNO JOB SUM(SAL)
---------- --------- ----------
29025
CLERK 4150
ANALYST 6000
MANAGER 8275
SALESMAN 5600
PRESIDENT 5000
10 8750
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 7875
20 CLERK 1900
20 ANALYST 3000
20 MANAGER 2975
30 9400
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
40
40
50
50 3000
50 ANALYST 3000
24 rows selected.
SQL> ;
1 select deptno,job,sum(sal)
2* from emp group by cube(deptno,job)
SQL>
結果:除了分組外,按DEPTNO的小計,並按job進行sum(sal),顯示在行集前面.
Grouping 結合cube或rollup在GROUP BY中的使用
SQL> ;
1 select deptno,job,sum(sal),
2 grouping(deptno) grp_dept,grouping(job) grp_job
3* from emp where deptno<60 group by cube(deptno,job)
SQL> /
DEPTNO JOB SUM(SAL) GRP_DEPT GRP_JOB
---------- --------- ---------- ---------- ----------
1 0
29025 1 1
CLERK 4150 1 0
ANALYST 6000 1 0
MANAGER 8275 1 0
SALESMAN 5600 1 0
PRESIDENT 5000 1 0
10 8750 0 1
10 CLERK 1300 0 0
10 MANAGER 2450 0 0
10 PRESIDENT 5000 0 0
20 7875 0 1
20 CLERK 1900 0 0
20 ANALYST 3000 0 0
20 MANAGER 2975 0 0
30 9400 0 1
30 CLERK 950 0 0
30 MANAGER 2850 0 0
30 SALESMAN 5600 0 0
40 0 0
40 0 1
50 0 0
50 3000 0 1
50 ANALYST 3000 0 0
24 rows selected.
Grouping sets 代替cube或rollup在GROUP BY中的使用
SQL> select deptno,job,mgr,sum(sal)
2 from emp group by grouping sets
3 ((deptno,job),(job,mgr));
DEPTNO JOB MGR SUM(SAL)
---------- --------- ---------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 CLERK 1900
20 ANALYST 3000
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
40
50
50 ANALYST 3000
CLERK 7698 950
CLERK 7782 1300
CLERK 7788 1100
CLERK 7902 800
ANALYST 7566 6000
MANAGER 7839 8275
SALESMAN 7698 5600
PRESIDENT 5000
21 rows selected.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/271063/viewspace-909523/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 深入理解GCD之dispatch_groupGC
- SQL Server之深入理解STUFFSQLServer
- PostgreSQL DBA(186) - SQL Group BySQL
- sql case when, Exist ,group by ,聚合SQL
- SQL Server中GROUP BY(連結)SQLServer
- SQL Server Availability Group Failover 測試SQLServerAI
- SQL函式Group_concat用法SQL函式
- [深入17] HTTP 和 HTTPSHTTP
- Linux 上配置 SQL Server Always On Availability GroupLinuxSQLServerAI
- mysql sql_mode ONLY_FULL_GROUP_BYMySql
- SQL改寫的方法,select group by sumSQL
- SQL -去重Group by 和Distinct的效率SQL
- 【SQL】17 SQL 檢視(Views)、SQL Date 函式、SQL NULL 值、SQLView函式Null
- three.js之GroupJS
- [原始碼解析] GroupReduce,GroupCombine 和 Flink SQL group by原始碼SQL
- 【學習】SQL基礎-005-group by子句SQL
- SQL程式設計:group by合併結果字串 —> group_concat函式就能行SQL程式設計字串函式
- MySQL 之 only_full_group_byMySql
- sql語句中where一定要放在group by 之前SQL
- Sql Server Linux(Redhat) Distributed Availability Group Setup — step by stepSQLServerLinuxRedhatAI
- MySQL sql_mode=only_full_group_by 錯誤MySql
- 17.Sql是如何執行的SQL
- mysql 禁用 ONLY_FULL_GROUP_BY,暫時解決錯誤(sql_mode=only_full_group_by)MySql
- Laravel 中 sql 查詢 使用 group by 報錯問題。LaravelSQL
- (二)《SQL進階教程》學習記錄--GROUP BY、PARTITION BYSQL
- java正規表示式之 groupJava
- 17_深入解析Oracle undo原理(1)_transactionOracle
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:AVAILABILITY GROUP ON子句SQLServerAI
- [SQL]group by和order by是否能寫欄位別名SQL
- 深入理解 Java17 新特性:Sealed ClassesJava
- sql中的left切割 與 group by後的兩次分組SQL
- MySQL this is incompatible with sql_mode=only_full_group_by-錯誤解決MySql
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:group_name引數SQLServer
- 深入瞭解 TiDB SQL 優化器TiDBSQL優化
- SQL Server 2008中Analysis Services的新特性——深入SQL Server 2008SQLServer
- 正規表示式之Matcher類中group方法
- 『高階篇』docker之APIGateway(17)DockerAPIGateway
- redis-17.持久化之AOFRedis持久化
- MySQL錯誤-this is incompatible with sql_mode=only_full_group_by完美解決方案MySql