设为首页 加入收藏

TOP

oracle中rollup和cube的用法(一)
2014-11-24 08:26:05 来源: 作者: 【 】 浏览:0
Tags:oracle rollup cube 用法
1、 Oracle ROLLUP和CUBE 用法
Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。
如果是Group by ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。 www.2cto.com
如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。 grouping_id()可以美化效果。除了使用GROUPING函数,还可以使用GROUPING_ID来标识GROUP BY的结果。
也可以 Group by Rollup(A,(B,C)) ,Group by A Rollup(B,C),…… 这样任意按自己想要的形式结合统计数据,非常方便。
2、实例
SQL> select grade,id,num from a;
GRADE ID NUM
---------- ---------- ----------
a 1 1
a 2 2
b 3 4
b 4 4
对grade字段进行rollup:
SQL> select grade,sum(num) from a group by rollup(grade);
www.2cto.com
GRADE SUM(NUM)
---------- ----------
a 3
b 8
11
同时对grade和id字段进行rollup
SQL> SELECT decode(grouping_id(grade,ID),2,'小计',3,'合计',grade) grade,
2 decode(grouping_id(grade,ID),1,'小计',3,'合计',ID) ID,
3 SUM(num)
4 FROM a GROUP BY ROLLUP(grade,ID)
5 /
GRADE ID SUM(NUM)
---------- ---------- ----------
a 1 1
a 2 2
a 小计 3
b 3 4
b 4 4
b 小计 8
合计 合计 11
7 rows selected
再看看先对grade分组,再对id进行rollup的情况:
SQL> SELECT grade,
2 decode(GROUPING(ID),1,'合计',ID) ID,
3 SUM(num)
4 FROM a GROUP BY grade,rollup(ID)
5 /
GRADE ID SUM(NUM)
---------- ---------- ----------
a 1 1
a 2 2
a 合计 3
b 3 4
b 4 4
b 合计 8
6 rows selected
这里GROUP BY grade,rollup(ID)跟你的理解应该很相近了,而且可以看出GROUP BY grade,rollup(ID)结果跟ROLLUP(grade,ID)很类似,只是少了最后1行总合计,但是也可以就看出rollup多个字段时并不是只有1个字段起作用的
可以认为你理解的是只对第一个字段的累计,跟GROUP BY grade,rollup(ID)的结果很接近,再看rollup3个字段的情况: www.2cto.com
SQL> select part,grade,id,num from a;
PART GRADE ID NUM
---- ---------- ---------- ----------
p1 a 1 1
p1 a 2 2
p1 b 3 3
p1 b 4 4
p2 c 5 5
p2 d 6 6
6 rows selected
SQL>
SQL> SELECT decode(grouping_id(part,grade,ID),7,'总计',part) part,
2 decode(grouping_id(part,grade,ID),3,'小计',7,'总计',grade) grade,
3 decode(grouping_id
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇SQL并发会出现的问题,事务隔离级.. 下一篇SQLServer 2008SP1安装报Restart ..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis压力测试实战 - (2025-12-27 09:20:24)
·高并发一上来,微服 (2025-12-27 09:20:21)
·Redis 高可用架构深 (2025-12-27 09:20:18)
·Linux 系统监控 的完 (2025-12-27 08:52:29)
·一口气总结,25 个 L (2025-12-27 08:52:27)