rollup是對group by的擴展,會進行小計和合計,而cube包含rollup,是粒度更精細的小計和合計。當只有一個字段時,rollup和cube是一樣的。 可用grouping對rollup和cube進行測試:0看;1不看[看表示列有顯示,不看表示沒有顯示] ① rollup ㈠ 什么都不看 ㈡ 從
rollup是對group by的擴展,會進行小計和合計,而cube包含rollup,是粒度更精細的小計和合計。當只有一個字段時,rollup和cube是一樣的。
可用grouping對rollup和cube進行測試:0看;1不看[看表示列有顯示,不看表示沒有顯示]
① rollup
㈠ 什么都不看
㈡ 從左往右?
–
┌ 先看第1個
│ 再看前2個
└ 后看前3個
② cube:0、1全排列
rollup
rollup后面指定的列以逗號分隔,rollup的計算結果和其后面指定的列的順序有關,因為rollup的分組具有方向性。若指定n列,則有n+1種分組方式。可改變列的順序,達到不同的業務需求。一定要牢記列的順序對結果的影響!
例子:
1.20:32:51 scott@ORCL (^ω^) select a.dname,b.job,sum(b.sal) sum_sal,grouping(a.dname),grouping(b.job)??
2.20:33:06?? 2??? from dept a,emp b??
3.20:33:06?? 3?? where a.deptno=b.deptno??
4.20:33:06?? 4?? group by rollup(a.dname,b.job)??
5.20:33:08?? 5? /??
6.??
7.DNAME????? JOB?????????? SUM_SAL GROUPING(A.DNAME) GROUPING(B.JOB)??
8.———- ———- ———- —————– —————???
9.SALES????? CLERK???????????? 950???????????????? 0?????????????? 0??
10.SALES????? MANAGER????????? 2850???????????????? 0?????????????? 0??
11.SALES????? SALESMAN???????? 5600???????????????? 0?????????????? 0??
12.SALES?????????????????????? 9400???????????????? 0?????????????? 1??
13.RESEARCH?? CLERK??????????? 1200???????????????? 0?????????????? 0??
14.RESEARCH?? ANALYST????????? 7000???????????????? 0?????????????? 0??
15.RESEARCH?? MANAGER????????? 2975???????????????? 0?????????????? 0??
16.RESEARCH?????????????????? 11175???????????????? 0?????????????? 1??
17.ACCOUNTING CLERK??????????? 1300???????????????? 0?????????????? 0??
18.ACCOUNTING MANAGER????????? 2450???????????????? 0?????????????? 0??
19.ACCOUNTING PRESIDENT??????? 5000???????????????? 0?????????????? 0??
20.ACCOUNTING????????????????? 8750???????????????? 0?????????????? 1??
21.?????????????????????????? 29325???????????????? 1?????????????? 1??
22.??
23.已選擇13行。?
解釋:什么都不看(1,1);從左往右,先看第一個(0,1)
可以將不需要進行小計和合計的列移出rollup,要小計的留在rollup里面。
比如:
1.20:48:37 scott@ORCL (^ω^) select a.dname,b.job,sum(b.sal) sum_sal,grouping(a.dname),grouping(b.job)??
2.20:57:43?? 2??? from dept a,emp b??
3.20:57:43?? 3?? where a.deptno=b.deptno??
4.20:57:43?? 4?? group by a.dname,rollup(b.job)??
5.20:57:45?? 5? /??
6.??
7.DNAME??????????????????????? JOB?????????????????? SUM_SAL GROUPING(A.DNAME) GROUPING(B.JOB)??
8.—————————- —————— ———- —————– —————???
9.SALES??????????????????????? CLERK???????????????????? 950???????????????? 0?????????????? 0??
10.SALES??????????????????????? MANAGER????????????????? 2850???????????????? 0?????????????? 0??
11.SALES??????????????????????? SALESMAN???????????????? 5600???????????????? 0?????????????? 0??
12.SALES???????????????????????????????????????????????? 9400???????????????? 0?????????????? 1??
13.RESEARCH???????????????????? CLERK??????????????????? 1200???????????????? 0?????????????? 0??
14.RESEARCH???????????????????? ANALYST????????????????? 7000???????????????? 0?????????????? 0??
15.RESEARCH???????????????????? MANAGER????????????????? 2975???????????????? 0?????????????? 0??
16.RESEARCH???????????????????????????????????????????? 11175???????????????? 0?????????????? 1??
17.ACCOUNTING?????????????????? CLERK??????????????????? 1300???????????????? 0?????????????? 0??
18.ACCOUNTING?????????????????? MANAGER????????????????? 2450???????????????? 0?????????????? 0??
19.ACCOUNTING?????????????????? PRESIDENT??????????????? 5000???????????????? 0?????????????? 0??
20.ACCOUNTING??????????????????????????????????????????? 8750???????????????? 0?????????????? 1??
21.??
22.已選擇12行。?