oracle:cube,rollup

本文详细介绍了Oracle 10g PL/SQL编程中CUBEROLLUP、ROLLUP和CUBE函数的用法。包括它们如何统计数据,以及在不同场景下的应用。通过实例展示了如何使用这些函数获取所需的数据汇总信息。

以下数据出于《Oracle.10g.Pl.SQL编程》

CUBE ROLLUP 是用于统计数据的

通常只用 GRUOP BY得到的数据如下

SELECT deptno,job, avg(sal)
FROM table_name
GROUP BY (deptno, job);

 

加上 ROLLUP

如果用 CUBE

注意不同,第二个表多了每行的平均数,还有全部数据的平均数

第3个表在第二个表上多了每列的平均数

 

下面介绍这两个函数:

ROLLUP

为每个分组返回一条小计记录,并为全部分组返回总计

SELECT deptno,job, avg(sal)
FROM table_name
GROUP BY ROLLUP(deptno, job);

 

CUBE

返回所有列组合的小计信息,同时在最后显示总计信息

SELECT deptno,job, avg(sal)
FROM table_name
GROUP BY CUBE(deptno, job);

 

GROUPING(column_name) 

对输入列返回0或1,如果该行数据使用了数据的列中的信息,则输出0,没有用到则输出1

或者这么理解,对于该行得出的统计数据,需要从 输入列中选择数据的话,输出0,不需要选择数据的就输出1

eg:

求部门1 职位j  的平均工资,对于输入 GRUOPING(deptno)和 GROUPING(job) 来说,都为0

如果只是统计部门1的平均工资对于输入 GRUOPING(deptno)和 GROUPING(job) 来说,前0后1

如果统计全部部门全部职位一起的平均工资,两者都为1


GROUPING SETS(column_name) 

只返回统计信息,就是上图中 提出两个 GROUPING 都为0的情况,两者为1的那个也剔除。

SELECT deptno,job, avg(sal)
FROM table_name
GROUP BY GROUPING SETS(deptno, job);

GROUPING_ID(column_name1,column_name2…)

这个返回一个整数,最小为0,这个整数怎么确定,将上面的输入的列,分配以bit,column_name1 的在column_name2的左边,

这样就形成了一个二进制数,将它转为10进制就是获得的数了,

怎么确定每位的0和1?

每位的值,和 GROUPING(column_name)的值是一样的,

例如上面的GROUPING(column_name1) GROUPING(column_name2) 为1 和0

则获得的值为 0b10 ,即2.

转载于:https://www.cnblogs.com/Azhu/archive/2012/04/18/2455379.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值