oracle分组_一文学会Oracle数据库分组函数之CUBE

概述

前面已经介绍了rollup的用法,而Oracle的CUBE与ROLLUP功能很相似,也是在数据统计分析领域经常用到的一个函数,下面一起来看看吧。


01

看一下ROLLUP的数据统计效果

1)创建测试表group_test

create table group_test (group_id int, job varchar2(10), name varchar2(10), salary int);

2)初始化数据

insert into group_test values (10,'Coding', 'Bruce',1000);insert into group_test values (10,'Programmer','Clair',1000);insert into group_test values (10,'Architect', 'Gideon',1000);insert into group_test values (10,'Director', 'Hill',1000);insert into group_test values (20,'Coding', 'Jason',2000);insert into group_test values (20,'Programmer','Joey',2000);insert into group_test values (20,'Architect', 'Martin',2000);insert into group_test values (20,'Director', 'Michael',2000);insert into group_test values (30,'Coding', 'Rebecca',3000);insert into group_test values (30,'Programmer','Rex',3000);insert into group_test values (30,'Architect', 'Richard',3000);insert into group_test values (30,'Director', 'Sabrina',3000);insert into group_test values (40,'Coding', 'Samuel',4000);insert into group_test values (40,'Programmer','Susy',4000);insert into group_test values (40,'Architect', 'Tina',4000);insert into group_test values (40,'Director', 'Wendy',4000);commit;
d026055e4297beebc1427771ca72c52a.png

3)ROLLUP的数据统计效果

select group_id,job,grouping(GROUP_ID),grouping(JOB),sum(salary) from group_test group by rollup(group_id, job);
68e69fdc59ba775d710838d706b76359.png

02

CUBE函数

select group_id,job,grouping(GROUP_ID),grouping(JOB),sum(salary) from group_test group by cube(group_id, job) order by 1;
1ec7043d0e8186711da3c5e3385525b9.png

说明:

GROUPING函数返回值如果显示“1”表示CUBE函数对应的列(例如JOB字段)是由于CUBE函数所产生的空值对应的信息,即对此列进行汇总计算后的结果。

GROUPING函数返回值如果显示“0”表示此行对应的这列参未与ROLLUP函数分组汇总活动。

“Using a single column as its argument,GROUPINGreturns 1 when it encounters aNULLvalue created by aROLLUPorCUBEoperation. That is, if theNULLindicates the row is a subtotal,GROUPINGreturns a 1. Any other type of value, including a storedNULL, returns a 0.”


03

CUBE与ROLLUP之间的细微差别

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

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

……以此类推……

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

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

……以此类推……


04

总结

CUBE在ROLLUP的基础上进一步从各种维度上给出细化的统计汇总结果。

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

bb20df88e0f3df8ac58ecb26bf381553.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值