oracle 中 rollup、cube、grouping 使用详解

转载自 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 是一个聚合函数,它产生一个附加的列,当用 CUBEROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBEROLLUP 产生时,附加列值为0。

仅在与包含 CUBEROLLUP 运算符的 GROUP BY 子句相联系的选择列表中才允许分组。

语法: GROUPING ( column_name )

GROUP BY 子句中用于检查 CUBEROLLUP 空值的列。

返回类型: int

分组用于区分由 CUBEROLLUP 返回的空值和标准的空值。作为CUBEROLLUP 操作结果返回的 NULLNULL 的特殊应用。它在结果集内作为列的占位符,意思是"全体"

*/

简单来说,就是在查询的数据结果中,对于每一行来说,如果某列是分组的依据,那么,grouping(该列)的值为0。否则为1.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13162384/viewspace-1056720/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13162384/viewspace-1056720/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值