oracle 中 rollup、cube、grouping 使用详解
-- 使用oracle 的样列库,演示 rollup, cube, grouping 的用法与使用场景
--- ROLLUP , 为了理解分组的成员数量,我增加了 分组的计数 COUNT(SAL)
SELECT E1.DEPTNO,
JOB,
TO_CHAR (E1.HIREDATE, 'YYYY-MM-DD'),
SUM (SAL),
COUNT (SAL)
FROM emp e1
GROUP BY ROLLUP (E1.DEPTNO, E1.JOB, E1.HIREDATE);
/*
分组情况为:
DEPTNO,job,HIREDATE 第 1 种分组 (A,B,C)
DEPTNO,job, 第 2 种分组 (A,B)
DEPTNO 第 3 种分组 (A)
总分一个组 */
--- CUBE , 为了理解分组的成员数量,我增加了 分组的计数 COUNT(SAL)
SELECT E1.DEPTNO,
JOB,
TO_CHAR (E1.HIREDATE, 'YYYY-MM-DD'),
SUM (SAL),
COUNT (SAL)
FROM emp e1
GROUP BY CUBE (E1.DEPTNO, E1.JOB, E1.HIREDATE);
/*
分组原则:
GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。 */
--- GROUPING函数
/*
GROUPING 是一个聚合函数,它产生一个附加的列,当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。
仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相联系的选择列表中才允许分组。
语法: GROUPING ( column_name )
是 GROUP BY 子句中用于检查 CUBE 或 ROLLUP 空值的列。
返回类型: int
分组用于区分由 CUBE 和 ROLLUP 返回的空值和标准的空值。作为CUBE 或 ROLLUP 操作结果返回的 NULL 是 NULL 的特殊应用。它在结果集内作为列的占位符,意思是"全体"。
*/
简单来说,就是在查询的数据结果中,对于每一行来说,如果某列是分组的依据,那么,grouping(该列)的值为0。否则为1.
-- 使用oracle 的样列库,演示 rollup, cube, grouping 的用法与使用场景
--- ROLLUP , 为了理解分组的成员数量,我增加了 分组的计数 COUNT(SAL)
SELECT E1.DEPTNO,
JOB,
TO_CHAR (E1.HIREDATE, 'YYYY-MM-DD'),
SUM (SAL),
COUNT (SAL)
FROM emp e1
GROUP BY ROLLUP (E1.DEPTNO, E1.JOB, E1.HIREDATE);
/*
分组情况为:
DEPTNO,job,HIREDATE 第 1 种分组 (A,B,C)
DEPTNO,job, 第 2 种分组 (A,B)
DEPTNO 第 3 种分组 (A)
总分一个组 */
--- CUBE , 为了理解分组的成员数量,我增加了 分组的计数 COUNT(SAL)
SELECT E1.DEPTNO,
JOB,
TO_CHAR (E1.HIREDATE, 'YYYY-MM-DD'),
SUM (SAL),
COUNT (SAL)
FROM emp e1
GROUP BY CUBE (E1.DEPTNO, E1.JOB, E1.HIREDATE);
/*
分组原则:
GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。 */
--- GROUPING函数
/*
GROUPING 是一个聚合函数,它产生一个附加的列,当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。
仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相联系的选择列表中才允许分组。
语法: GROUPING ( column_name )
是 GROUP BY 子句中用于检查 CUBE 或 ROLLUP 空值的列。
返回类型: int
分组用于区分由 CUBE 和 ROLLUP 返回的空值和标准的空值。作为CUBE 或 ROLLUP 操作结果返回的 NULL 是 NULL 的特殊应用。它在结果集内作为列的占位符,意思是"全体"。
*/
简单来说,就是在查询的数据结果中,对于每一行来说,如果某列是分组的依据,那么,grouping(该列)的值为0。否则为1.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26366371/viewspace-2062137/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26366371/viewspace-2062137/