rollup函数 和cube函数 的区别?
admin
2023-02-07 12:20:03
0次
    有的小伙伴会发现在数据统计报表的时候会经常在最后对列进行一个汇总,那么在oracle中是那些函数来实现汇总的呢?今天就来讲一下rollup函数和cube函数的区分。
首先,创建一张表tmp1,数据如下:

rollup函数 和cube函数 的区别?
那么,我们先看一下cube汇总出来的数据是什么样子的吧?
select t_class,t_address,(t_number) t_number from tmp1 group by cube(t_class,t_address);
rollup函数 和cube函数 的区别?
有的小伙伴可能已经发现了,cube函数汇总的数据相当于把所有的可能性的数据汇总了出来。没错,其实这条sql语句相当于以下的union all语句:
select null,null,sum(t_number) t_number from tmp1
union all
select null,t_address,sum(t_number) t_number from tmp1 group by t_address
union all
select t_class,null,sum(t_number) t_number from tmp1 group by t_class
union all
select t_class,t_address,sum(t_number) t_number from tmp1 group by t_class,t_address;

那么,现在我们看一下rollup汇总出来的数据是什么样子的吧?
select t_class,t_address,(t_number) t_number from tmp1 group by rollup(t_class,t_address);
rollup函数 和cube函数 的区别?
有的小伙伴可能已经发现了,rollup函数汇总的数据也可以用union all语句来实现:
select null,null,sum(t_number) t_number from tmp1
union all
select t_class,null,sum(t_number) t_number from tmp1 group by t_class
union all
select t_class,t_address,sum(t_number) t_number from tmp1 group by t_class,t_address;

    **总结:**
    如果使用group by rollup(A,B,C),首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。roll up的意思是“卷起”,这也可以帮助我们理解group by rollup就是对选择的列从右到左以一次少一列的方式进行grouping直到所有列都去掉后的grouping(也就是全表grouping),对于n个参数的rollup,有n+1次的grouping。

cube的意思是立方,对cube的每个参数,都可以理解为取值为参与grouping和不参与grouping两个值的一个维度,然后所有维度取值组合的集合就是grouping的集合,对于n个参数的cube,有2^n次的grouping。如果使用group by cube(A,B,C),,则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作,一共是2^3=8次grouping。

另外,当实际表中也存在null值时,如何区分cube和rollup运算符所生成的null值呢?这时我们可以用grouping函数来区分,这里我们就举一个简单的例子来区分t_class列的null值,sql如下:
select t_class,t_address,(t_number) t_number,grouping(t_class) from tmp1

group by rollup(t_class,t_address);
rollup函数 和cube函数 的区别?
从图中可以看到grouping(t_class)列中有0和1两个数字,其中1表示由rollup运算符造成的null值,其余null值为事实数据的空值。事实上grouping是一个聚合函数,它产生了一个附加的列,当用cube或rollup运算符添加行时,附加的列值为1;当所添加的行不是由cube或rollup产生时,附加列值为0.

希望对大家能有所帮助!

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...