oracle 的 group by 和 rollup,cube 的使用。

新建一个表:

CREATE  TABLE tt (产地 varchar(20),  水果  varchar(20),重量 number);  
INSERT into tt VALUES ('北方','香蕉',3);  
INSERT into tt VALUES ('北方','水蜜桃',2) ; 
INSERT into tt VALUES ( '南方','桔子',3) ; 
INSERT into tt VALUES ( '北方','水蜜桃',5) ; 
INSERT into tt VALUES ( '南方','香蕉',3) ; 
INSERT into tt VALUES ( '南方','水蜜桃',6);  
INSERT into tt VALUES ( '北方','桔子' ,8);

一般的group by语句:

按产地分类

select tt.产地,sum(tt.重量)
from tt
group by tt.产地;
结果为:

或者按水果分类:

select tt.水果,sum(tt.重量)
from tt
group by tt.水果;


1.rollup 的作用:

       1.1 传递一行:

代码为:

select tt.水果,sum(tt.重量)
from tt
group by rollup(tt.水果);

加入一行汇总的内容。

    1.2传递多列

先看普通代码:

select tt.水果,tt.产地,sum(tt.重量)
from tt
group by tt.水果,tt.产地;
结果当然与原表一致;


加入rollup:

select tt.水果,tt.产地,sum(tt.重量)
from tt
group by rollup(tt.水果,tt.产地);

结果为:

优先按 水果总类汇总,然后 再 将所有的重量汇总。若将 tt.产地 与 tt水果 交换位置,则优先按 产地汇总,然后再讲所有的重量汇总。


而若将  
tt.产地   移出括号外面,代码为:

select tt.水果,tt.产地,sum(tt.重量)
from tt
group by rollup(tt.水果),tt.产地;


结果按 产地 汇总,但是不进行 所有的汇总。交换 tt.产地 和 rollup(tt.水果)  的group by 顺序,结果不变。

则易知若将 tt.水果 移出括号外面,代码为:

select tt.水果,tt.产地,sum(tt.重量)
from tt
group by rollup(tt.产地),tt.水果;
结果为:

 按水果类型汇总, 不进行 所有的汇总,交换  tt.水果 和 rollup(tt.产地) 的group by 顺序,结果不变。

2.Cube的作用

2.1 向 cube传入一行

结果与rollup 区别貌似不大,只是汇总结果默认在上面。

2.2向 cube传入多行

select tt.水果,tt.产地,sum(tt.重量)
from tt
group by cube(tt.水果,tt.产地);
结果为:


可见,汇总结果为:先显示所有内容的汇总,再输出按产地的汇总,再输出按水果类型的汇总,且原表的数据也都输出了。现在交换 产地 和 水果 的位置:

select tt.水果,tt.产地,sum(tt.重量)
from tt
group by cube(tt.产地,tt.水果);
结果为:


可见,结果为:先显示所有内容的汇总,再输出按水果类型的汇总,再输出按产地的汇总,且原表的数据也都输出了。现在讲 产地移到括号外面:

select tt.水果,tt.产地,sum(tt.重量)
from tt
group by cube(tt.水果),tt.产地;
结果为:


只按产地汇总,且汇总的数据先输出。交换 cube(tt.水果) 和 tt.产地,代码为:

select tt.水果,tt.产地,sum(tt.重量)
from tt
group by cube(tt.产地),tt.水果;

结果为:

可见,只按水果类型汇总,且汇总的数据先输出。

相信 通过以上的例子,可以看出rollup和cube的作用以及他们的区别了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值