ITPub博客

首页 > 数据库 > Oracle > oracle 中 rollup、cube、grouping 使用详解

oracle 中 rollup、cube、grouping 使用详解

原创 Oracle 作者:silentBeauty 时间:2011-12-06 16:50:06 0 删除 编辑
转载自http://www.cxybl.com/html/wlbc/db/Oracle/2011_0826_2620.html。[@more@]

-- 使用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博客 ” ,链接:https://blog.itpub.net/13162384/viewspace-1056720/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    26
  • 访问量
    184142