在多行查詢中,使用rollup語句能夠大大提高我們的操作效率,在開始接觸rollup語句
的時候,總是不能理解其中的順序,查了一些資料和前輩們的博客,實踐操作了幾次,在此總結一下,首先rollup是卷起的意思,大體能夠形容他的作用。
group by rollup(a,b)
這條語句相當於分組三次
第一次,a,b兩個約束條件,即a相同,b也相同的分為同一組
第二次,只是用a一個條件進行分組,把上一次形成的結果在進行分組,把a相同的分為一組
第三次,沒有約束條件,將整個表數據分為一組
這樣三次之后,我們就有了三個分組條件,那么sum函數,就會給每一個分組都執行一次計算總和
舉例如下:
1 SQL> select deptno,job,sum(sal) from emp group by deptno,job order by deptno; 2 單獨使用分組查詢 3 4 DEPTNO JOB SUM(SAL) 5 ------ --------- ---------- 6 10 CLERK 1300 7 10 MANAGER 2450 8 10 PRESIDENT 5000 9 20 ANALYST 6000 10 20 CLERK 1900 11 20 MANAGER 2975 12 30 CLERK 950 13 30 MANAGER 2850 14 30 SALESMAN 5600 15 16 已選擇9行。 17 18 SQL> select deptno,job,sum(sal) from emp group by rollup(deptno,job) order by deptno; 19 20 DEPTNO JOB SUM(SAL) 21 ------ --------- ---------- 22 10 CLERK 1300 第一次分組的sum總和計算 23 10 MANAGER 2450 24 10 PRESIDENT 5000 25 10 8750 第二次分組添加的計算 26 20 ANALYST 6000 27 20 CLERK 1900 28 20 MANAGER 2975 29 20 10875 30 30 CLERK 950 31 30 MANAGER 2850 32 30 SALESMAN 5600 33 30 9400 34 29025 第三次分組添加的計算 35 所以rollup函數進行多次分組計算 36 37 已選擇13行。