oracle rollup 排序,Oracle ROLLUP和CUBE 用法(介绍到三个列分组的情况)

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)的结果很接近,再看rollup

3个字段的情况:

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(part,grade,ID),1,'小计',3,'小计',7,'总计',ID)

ID,

4 SUM(num)

5 FROM a GROUP BY ROLLUP(part,grade,ID)

6 /

PART GRADE ID SUM(NUM)

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

p1 a 1 1

p1 a 2 2

p1 a 小计 3

p1 b 3 3

p1 b 4 4

p1 b 小计 7

p1 小计 小计 10

p2 c 5 5

p2 c 小计 5

p2 d 6 6

p2 d 小计 6

p2 小计 小计 11

总计 总计 总计 21

13 rows selected

这里不光只对第一个字段做了累计,先按(part,grade,ID)分组累计,然后按(part,grade)分组累计,再按(part)分组累计,最后累计全部

再看看rollup 和 cube的区别:

对于ROLLUP(part,grade,ID),grouping_id(part,grade,ID)的值范围在(0,1,3,7)间即

part,grade,ID(作为合计时计为1)

0,0,0

0,0,1

0,1,1

1,1,1

而对于cube(part,grade,ID),grouping_id(part,grade,ID)的值范围在0-7之间即

part,grade,ID(作为合计时计为1)

0,0,0

0,0,1

0,1,0

0,1,1

1,0,0

1,0,1

1,1,0

原文出自【比特网】,转载请保留原文链接:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值