oracle cube排序,【CUBE】oracle分组函数之CUBE演示及与ROLLUP的比较

CUBE与ROLLUP功能很相似,也是在统计数据时的一把好手。

对ROLLUP的统计效果请参考《【实验】【ROLLUP】oracle分组函数之ROLLUP演示》http://space.itpub.net/?uid-519536-action-viewspace-itemid-610995

1.先显示一下ROLLUP的效果

sec@ora10g> select * from group_test;

GROUP_ID JOB        NAME           SALARY

---------- ---------- ---------- ----------

10 Coding     Bruce            1000

10 Programmer Clair            1000

10 Architect  Gideon           1000

10 Director   Hill             1000

20 Coding     Jason            2000

20 Programmer Joey             2000

20 Architect  Martin           2000

20 Director   Michael          2000

30 Coding     Rebecca          3000

30 Programmer Rex              3000

30 Architect  Richard          3000

30 Director   Sabrina          3000

40 Coding     Samuel           4000

40 Programmer Susy             4000

40 Architect  Tina             4000

40 Director   Wendy            4000

16 rows selected.

sec@ora10g> select group_id,job,grouping(GROUP_ID),grouping(JOB),sum(salary) from group_test group by rollup(group_id, job);

GROUP_ID JOB        GROUPING(GROUP_ID) GROUPING(JOB) SUM(SALARY)

---------- ---------- ------------------ ------------- -----------

10 Coding                      0             0        1000

10 Director                    0             0        1000

10 Architect                   0             0        1000

10 Programmer                  0             0        1000

10                             0             1        4000

20 Coding                      0             0        2000

20 Director                    0             0        2000

20 Architect                   0             0        2000

20 Programmer                  0             0        2000

20                             0             1        8000

30 Coding                      0             0        3000

30 Director                    0             0        3000

30 Architect                   0             0        3000

30 Programmer                  0             0        3000

30                             0             1       12000

40 Coding                      0             0        4000

40 Director                    0             0        4000

40 Architect                   0             0        4000

40 Programmer                  0             0        4000

40                             0             1       16000

1             1       40000

21 rows selected.

2.再看一下CUBE的效果

sec@ora10g> select group_id,job,grouping(GROUP_ID),grouping(JOB),sum(salary) from group_test group by cube(group_id, job) order by 1;

GROUP_ID JOB        GROUPING(GROUP_ID) GROUPING(JOB) SUM(SALARY)

---------- ---------- ------------------ ------------- -----------

10 Architect                   0             0        1000

10 Coding                      0             0        1000

10 Director                    0             0        1000

10 Programmer                  0             0        1000

10                             0             1        4000

20 Architect                   0             0        2000

20 Coding                      0             0        2000

20 Director                    0             0        2000

20 Programmer                  0             0        2000

20                             0             1        8000

30 Architect                   0             0        3000

30 Coding                      0             0        3000

30 Director                    0             0        3000

30 Programmer                  0             0        3000

30                             0             1       12000

40 Architect                   0             0        4000

40 Coding                      0             0        4000

40 Director                    0             0        4000

40 Programmer                  0             0        4000

40                             0             1       16000

Architect                   1             0       10000

Coding                      1             0       10000

Director                    1             0       10000

Programmer                  1             0       10000

1             1       40000

25 rows selected.

3.仔细观察一下,这儿两个的细微差别是什么?

rollup(a,b)   统计列包含:(a,b)、(a)、()

rollup(a,b,c) 统计列包含:(a,b,c)、(a,b)、(a)、()

……以此类推ing……

cube(a,b)     统计列包含:(a,b)、(a)、(b)、()

cube(a,b,c)   统计列包含:(a,b,c)、(a,b)、(a,c)、(b,c)、(a)、(b)、(c)、()

……以此类推ing……

So,上面例子中CUBE的结果比ROLLUP多了下面关于第一列GROUP_ID的统计信息:

Architect                   1             0       10000

Coding                      1             0       10000

Director                    1             0       10000

-- The End --

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值