我的编程空间,编程开发者的网络收藏夹
学习永远不晚

rollup函数 和cube函数 的区别?

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

rollup函数 和cube函数 的区别?

    有的小伙伴会发现在数据统计报表的时候会经常在最后对列进行一个汇总,那么在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.

希望对大家能有所帮助!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

rollup函数 和cube函数 的区别?

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Oracle 函数 ROLLUP,CUBE

create table group_test (group_id int, job varchar2(10), name varchar2(10), salary int); 初始化数据 insert into group_test values (10,
Oracle 函数 ROLLUP,CUBE
2021-08-27

PHP 函数和 Shell 函数的区别

php 函数和 shell 函数的主要区别在于安全性(php 函数更安全)、可靠性(shell 函数因操作系统而异)、功能(shell 函数更强大但受 shell 限制)、性能(php 函数通常更快)和复杂性(shell 函数更复杂)。它们
PHP 函数和 Shell 函数的区别
2024-04-24

PHP 函数和 .NET 函数的区别

php 与 .net 函数的关键差异在于语法、命名空间、类型安全性、可变参数和实战案例:语法:php 使用 function 关键字,而 .net 使用访问修饰符。命名空间:php 没有命名空间,而 .net 可以将其用于组织代码。类型安全
PHP 函数和 .NET 函数的区别
2024-04-24

PHP 函数和 SwiftUI 函数有何区别?

php 函数与 swiftui 函数存在语法、用途和目的上的差异。语法上,php 函数使用 function 声明,而 swiftui 函数使用 func,并且 swiftui 函数指定了返回类型。用途上,php 函数主要用于 web 开发
PHP 函数和 SwiftUI 函数有何区别?
2024-04-25

C++ 函数重载和函数模板的区别

函数重载和函数模板的区别:函数重载:具有相同名称但不同的输入类型和数量的同域函数,编译时根据输入类型选用相应函数。函数模板:通用的函数定义,使用类型占位符,在实例化时根据输入类型生成具体函数。C++ 函数重载和函数模板的区别函数重载函数重
C++ 函数重载和函数模板的区别
2024-04-14

lenb函数和len函数有什么区别

lenb函数和len函数的区别:1、功能不同;2、返回结果不同;3、对双字节字符的处理不同;4、应用场景不同。详细介绍:1、功能不同,LEN函数是返回文本字符串中的字符个数,LENB函数是返回文本中所包含的字符数,与双字节字符集一起使用;2
lenb函数和len函数有什么区别
2023-12-15

PHP 函数与 Go 函数的区别?

php和go函数的主要区别包括:类型化(go强制,php可选)、默认值(php可设置,go不可)、可见性(php默认公开,go通过关键字指定)、匿名函数(php支持,go不支持)、返回多个值(php只能返回一个,go可返回多个并存储在tup
PHP 函数与 Go 函数的区别?
2024-04-25

PHP 函数与 Swift 函数的区别?

php和swift函数的主要区别包括:类型系统(php可选、swift严格)、参数传递(php值传递、swift引用传递)、可选返回值(php可null、swift必须非null)。php函数更灵活,而swift函数更安全且性能更好。PHP
PHP 函数与 Swift 函数的区别?
2024-04-26

PHP 函数与 Swift 函数的区别?

php和swift函数的主要区别包括:类型系统(php可选、swift严格)、参数传递(php值传递、swift引用传递)、可选返回值(php可null、swift必须非null)。php函数更灵活,而swift函数更安全且性能更好。PHP
PHP 函数与 Swift 函数的区别?
2024-04-26

PHP 函数与 Erlang 函数的区别?

php 函数与 erlang 函数的关键区别:语法:php 使用 c 风格语法,括号中包含参数,而 erlang 使用后缀表示法,参数跟在函数名称之后。返回值:php 函数显式返回一个值,而 erlang 函数的最后一个表达式值返回。参数传
PHP 函数与 Erlang 函数的区别?
2024-04-25

PHP 函数与 Elm 函数的区别?

php 和 elm 函数的差异:php 函数使用 function 关键字声明,elm 函数使用 val 或 fun 关键字声明。php 函数使用弱类型系统,而 elm 函数使用强类型系统,强制参数和返回值匹配指定的类型。php 函数可以接
PHP 函数与 Elm 函数的区别?
2024-04-25

PHP 函数与 Ruby 函数的区别?

php 和 ruby 函数处理方式的区别在于:函数定义:php用function,ruby用def;参数处理:php用圆括号,参数可按值或引用传递;ruby也用圆括号,但参数仅按值传递;返回值:php用return语句,ruby隐式返回。P
PHP 函数与 Ruby 函数的区别?
2024-04-26

PHP 函数与 F# 函数的区别?

php和f#函数的区别在于:定义:php使用function关键字,f#使用let关键字。类型签名:php可选,f#必须指定。返回类型:php可省略,f#必须明确。参数传递:php按引用,f#按值。实战案例:php函数指定参数类型,按引用传
PHP 函数与 F# 函数的区别?
2024-04-25

PHP 函数与 Java 函数的区别?

php 和 java 函数的主要区别在于:php 函数通过引用传递参数,而 java 函数通过值传递参数。php 函数通常没有明确的类型签名,而 java 函数具有严格的类型签名。php 函数可以返回任何数据类型,而 java 函数必须指定
PHP 函数与 Java 函数的区别?
2024-04-25

PHP 函数与 Python 函数的区别?

php 与 python 函数的主要区别在于参数传递方式(php 值传递,python 引用传递)和返回值机制(php 通过 return 语句,python 通过最后一行表达式隐式返回)。此外,php 要求显式函数声明,而 python
PHP 函数与 Python 函数的区别?
2024-04-25

编程热搜

目录