Oracle 函数弹窗_initcap函数

Oracle 函数弹窗_initcap函数创建测试表 group_test create table group_test (group_id int, job varchar2(10), name varchar2(10), salary…

Oracle 函数 ROLLUP,CUBE

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

代码100分

初始化数据

代码100分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);

查询结果

Oracle 函数弹窗_initcap函数

ROLLUP的数据统计效果

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

Oracle 函数弹窗_initcap函数

CUBE 的数据统计效果

Oracle 函数弹窗_initcap函数

总结

代码100分GROUPING 返回1和0 的含义
   如果显示1表示CUBE函数对应的列(例如job字段) 是由于CUBE 函数所产生的空值对应的信息,即对此列进行汇总后计算的结 
   果。
   如果显示0 表示此行对应的这列未参与与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),()

   先按一定的规则产生多种分组,然后按各种分组统计数据

1、rollup介绍:

group by后带rollup子句的功能可以理解为:先按一定的规则产生多种分组,然后按各种分组统计数据。(至于统计出的数据是求和还是最大值还是平均值等这就取决于SELECT后的聚合函数)。 oracle中rollup和mysql的差不多,但比mysql的强大(mysql只有下面的第1和第2使用方式),且oracle中rollup可以和order by一起使用。具体使用如下:
1)对比没有带rollup的goup by :

Group by A,B产生的分组种数:1种;
Group by A,B
返回结果集:也就是这一种分组的结果集。

2)带rollup但group by与rollup之间没有任何内容 :

 A、Group by rollup(A ,B) 产生的分组种数:3种;
 第一种:group by A,B
 第二种:group by A
 第三种:group by NULL
 返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。

B、Group by rollup(A ,B,C) 产生的分组种数:4种;
 第一种:group by A,B,C
 第二种:group by A,B
 第三种:group by A
 第四种:group by NULL
 返回结果集:为以上四种分组统计结果集的并集且未去掉重复数据。

3)带rollup但groupby与rollup之间还包含有列信息
 A、Group by A , rollup(A ,B) 产生的分组种数:3种;

 第一种:group by A,A,B    等价于group by A,B
 第二种:group by A,A      等价于group by A
 第三种:group by A,NULL  等价于group by A
 返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。
 
 B、Group by C , rollup(A ,B) 产生的分组种数:3种;
 第一种:group by C,A,B   
 第二种:group by C,A     
 第三种:group by C,NULL  等价于group by C
 返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。

4)带rollup且rollup子句括号内又使用括号对列进行组合

 A、Group by rollup((A ,B)) 产生的分组种数:2种;

 第一种:group by A,B
 第二种:group by NULL
 返回结果集:为以上两种分组统计结果集的并集且未去掉重复数据。

 B、Group by rollup(A ,(B,C)) 产生的分组种数:3种;

 第一种:group by A,B,C
 第二种:group by A
 第三种:group by NULL
 返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。

注:对这种情况,可以理解为几个列被括号括在一起时,就只能被看成一个整体,分组时不需要再细化。因此也可推断rollup括号内也顶多加到一重括号,加多重了应该没有任何意义(这个推断我没有做验证的哦)。

2、与rollup组合使用的其它几个辅助函数:

1)grouping()函数:

 必须接受一列且只能接受一列做为其参数。参数列值为空返回1,参数列值非空返回0。(如果参数的列在rollup中,则返回1;否则返回0)
2)grouping_id()函数:
 必须接受一列或多列做为其参数。返回值为按参数排列顺序,依次对各个参数使用grouping()函数,并将结果值依次串成一 串二进制数然后再转化为十进制所得到的值。

例如:grouping(A) = 0 ;grouping(B) = 1;

     则:grouping_id(A,B) = (01)2 = 1;

         grouping_id(B,A)= (10)2 =2;

 3)group_id()函数

  调用时不需要且不能传入任何参数。返回值为某个特定的分组出现的重复次数(第一大点中的第3种情况中往往会产生重复的分组)。重复次数从0开始,例如某个分组第一次出现则返回值为0,第二次出现时返回值为1,……,第n次出现返回值为n-1。

注:使用以上三个函数往往是为了过滤掉一部分统计数据,而达到美化统计结果的作用。

3、cube和rollup区别:

带cube子句的groupby会产生更多的分组统计数据。cube后的列有多少种组合(注意组合是与顺序无关的)就会有多少种分组。

1)假设有n个维度,rollup会有n个聚合:

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

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

         ……以此类推ing……

2)假设有n个纬度,cube会有2的n次方个聚合:

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

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

         ……以此类推ing……

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8771.html

(0)
上一篇 2023-02-22
下一篇 2023-02-22

相关推荐

  • mysql基本数据类型_以下哪些是mysql数据类型

    mysql基本数据类型_以下哪些是mysql数据类型2020年4月27日 8:22 1、整型 类型: 字节大小 数值范围 Tinyint 1 有符号:-128~127 无符号: 0~255 smallint 2 有符号:-32768~32767 无符号

    2023-02-24
    133
  • Python中更新字典的技巧

    Python中更新字典的技巧字典是Python中非常常用的一种数据类型,它是一种映射类型,用于存储键值对。在使用字典的过程中,经常会涉及到更新字典中的元素,本文将从多个方面对Python中更新字典的技巧进行详细的阐述。

    2024-01-30
    115
  • 查询oracle中所有用户信息(转)

    查询oracle中所有用户信息(转)
    查询oracle中所有用户信息 1、查询数据库中的表空间名称 1)查询所有表空间 select tablespace_name from dba_table…

    2023-04-05
    150
  • Python内存管理:简化代码中的内存管理

    Python内存管理:简化代码中的内存管理在Python中,内存管理部分是由垃圾回收机制来实现的。垃圾回收机制会自动回收不再使用的内存,从而减轻了程序员的负担。

    2024-02-01
    114
  • Redis学习笔记(十二) 复制(上)

    Redis学习笔记(十二) 复制(上)偷个懒,晚上工作忙的太晚,整个复制功能的内容还没有写完,这里先说一下复制功能的简单应用。 在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制另一个服务器,

    2023-03-03
    142
  • PHP程序员如何做好MySQL数据库优化

    PHP程序员如何做好MySQL数据库优化1.使用MyISAM而不是InnoDB MySQL有很多数据库引擎,但是你最可能碰到的就是MyISAM和InnoDB。 MySQL默认使用的是MyISAM。但是,很多情况下这都是一个很糟糕的选择,除…

    2023-03-15
    147
  • 如何在python中使用?

    如何在python中使用?Python是一种强大、直观、易于学习的编程语言,因此在各行各业都有广泛的应用。无论你是一个新手还是一个有经验的开发人员,高效地使用Python将使你的工作更加轻松、快捷。

    2024-05-04
    67
  • 学习Matplotlib数据可视化库的完整指南

    学习Matplotlib数据可视化库的完整指南数据可视化是现代数据分析和探索中非常重要和必要的一环。作为Python中最著名的可视化工具之一,Matplotlib库已经成为许多数据科学家日常工作中不可或缺的一部分。如果你想学习如何创建有吸引力和易于理解的数据可视化,那么这篇文章就是为你准备的。

    2024-07-20
    31

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注