免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 840 | 回复: 0
打印 上一主题 下一主题

[数据库] Oracle rollup和cube分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-20 09:30 |只看该作者 |倒序浏览
rollup是对group by的扩展,会进行小计和合计,而cube包含rollup,是粒度更精细的小计和合计。当只有一个字段时,rollup和cube是一样的。
cuug每周五晚都有免费网络课程,详情可点击cuug官网了解。
可用grouping对rollup和cube进行测试:0看;1不看[看表示列有显示,不看表示没有显示]

① rollup

㈠ 什么都不看

㈡ 从左往右

┌ 先看第1个

│ 再看前2个

└ 后看前3个

② cube:0、1全排列

rollup

rollup后面指定的列以逗号分隔,rollup的计算结果和其后面指定的列的顺序有关,因为rollup的分组具有方向性。若指定n列,则有n+1种分组方式。可改变列的顺序,达到不同的业务需求。一定要牢记列的顺序对结果的影响!

例子:

20:32:51 scott@ORCL (^ω^) select a.dname,b.job,sum(b.sal) sum_sal,grouping(a.dname),grouping(b.job)  
20:33:06   2    from dept a,emp b  
20:33:06   3   where a.deptno=b.deptno  
20:33:06   4   group by rollup(a.dname,b.job)  
20:33:08   5  /  
  
DNAME      JOB           SUM_SAL GROUPING(A.DNAME) GROUPING(B.JOB)  
---------- ---------- ---------- ----------------- ---------------   
SALES      CLERK             950                 0               0  
SALES      MANAGER          2850                 0               0  
SALES      SALESMAN         5600                 0               0  
SALES                       9400                 0               1  
RESEARCH   CLERK            1200                 0               0  
RESEARCH   ANALYST          7000                 0               0  
RESEARCH   MANAGER          2975                 0               0  
RESEARCH                   11175                 0               1  
ACCOUNTING CLERK            1300                 0               0  
ACCOUNTING MANAGER          2450                 0               0  
ACCOUNTING PRESIDENT        5000                 0               0  
ACCOUNTING                  8750                 0               1  
                           29325                 1               1  
  
已选择13行。  
解释:什么都不看(1,1);从左往右,先看第一个(0,1)

可以将不需要进行小计和合计的列移出rollup,要小计的留在rollup里面。

比如:

20:48:37 scott@ORCL (^ω^) select a.dname,b.job,sum(b.sal) sum_sal,grouping(a.dname),grouping(b.job)  
20:57:43   2    from dept a,emp b  
20:57:43   3   where a.deptno=b.deptno  
20:57:43   4   group by a.dname,rollup(b.job)  
20:57:45   5  /  
  
DNAME                        JOB                   SUM_SAL GROUPING(A.DNAME) GROUPING(B.JOB)  
---------------------------- ------------------ ---------- ----------------- ---------------   
SALES                        CLERK                     950                 0               0  
SALES                        MANAGER                  2850                 0               0  
SALES                        SALESMAN                 5600                 0               0  
SALES                                                 9400                 0               1  
RESEARCH                     CLERK                    1200                 0               0  
RESEARCH                     ANALYST                  7000                 0               0  
RESEARCH                     MANAGER                  2975                 0               0  
RESEARCH                                             11175                 0               1  
ACCOUNTING                   CLERK                    1300                 0               0  
ACCOUNTING                   MANAGER                  2450                 0               0  
ACCOUNTING                   PRESIDENT                5000                 0               0  
ACCOUNTING                                            8750                 0               1  
  
已选择12行。  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP