oracle中grouping,Oracle中group by 的扩展函数rollup、cube、grouping sets

2023-05-16

Oracle的group by除了基本用法以外,还有3种扩展用法,分别是rollup、cube、grouping sets,分别介绍如下:

1、rollup

对数据库表emp,假设其中两个字段名为a,b,c。

如果使用group by rollup(a,b),首先会对(a,b)进行group by ,然后对 a 进行 group by ,最后对全表进行 group by 操作。

如下查询结果:

025d66b0e3fd6de53901869a49dd177a.png

查询语句

Select deptno,job,sum(sal) from emp group by rollup(deptno,job);

等同于

Select deptno,job,sum(sal) from emp group by deptno,job

union all

Select deptno,null sum(sal) from emp group by deptno

union all

Select null,null,sum(sal) from emp (group by null )

2、cube

如果使用group by cube(a,b),,则首先会对(a,b)进行group by,然后依次是(a),(b),最后对全表进行group by 操作,一共是2^2=4次grouping

如下查询结果;

79fd44765dfa75efbd239efce45e61ee.png

查询语句

Select deptno,job,sum(sal) from emp group by cube(deptno,job);

等同于

Select deptno,job,sum(sal) from emp group by deptno,job

union all

Select deptno,null sum(sal) from emp group by deptno

union all

Select null,job, sum(sal) from emp group by job

union all

Select null,null,sum(sal) from emp (group by null )

3、grouping sets

grouping sets就是对参数中的每个参数做grouping,如果使用group by grouping sets(a,b),则对(a),(b)进行group by

如下查询结果:

3137651790a8b1962afb0b9d71ac5734.png

查询语句

Select deptno,job,sum(sal) from emp group by cube(deptno,job);

等同于

select null,job,sum(sal) from emp group by job

union all

select deptno,null,sum(sal) from emp group by deptno

4、grouping

使用grouping可以判断该行是数据库中本来的行,还是有统计产生的行,grouping值为0时说明这个值是数据库中本来的值,为1说明是统计的结果,参数只有一个,而且必须为group by中出现的某一列

如下查询结果:

9f8761d8d301a5811f25c29a29afd662.png

查询语句

select deptno,job,sum(sal),grouping(deptno) a,grouping(job) b from emp group by rollup(deptno,job);

5、grouping_id

Grouping_id()的返回值其实就是参数中的每列的grouping()值的二进制向量,如果grouping(a)=1,grouping(b)=1,则grouping_id(A,B)的返回值就是二进制的11,转成10进制就是3。参数可以是多个,但必须为group by中出现的列。

查询结果如下:

2cfb5b3127279283fd45a7af33f4d964.png

查询语句

select deptno,job,sum(sal),grouping(deptno) a,grouping(job) b,grouping_id(deptno,job) from emp group by rollup(deptno,job);

6、group_id

GROUP_ID()唯一标识重复组,可以通过group_id去除重复组

查询结果如下:

4d96319be1cc1089f93493465469ee5a.png

查询语句

select deptno,job,sum(sal),group_id() from emp group by deptno, rollup(deptno,job) having group_id()=0;

版权声明:本文为博主原创文章,未经博主允许不得转载。

Oracle中group by 的扩展函数rollup、cube、grouping sets

标签:group by   rollup   cube   grouping sets   oracle

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:http://blog.csdn.net/afei3418/article/details/47615625

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

oracle中grouping,Oracle中group by 的扩展函数rollup、cube、grouping sets 的相关文章

  • 匹配可能存在或可能不存在的组

    我的正则表达式需要解析一个如下所示的地址 BLOOKKOKATU 20 A 773 00810 HELSINKI SUOMI 1 2 3 4 第一组 第二组和第三组将始终存在于地址中 第 4 组可能不存在 我编写了一个正则表达式来帮助我获得
  • 水晶报表参数选择有限制吗?

    我正在尝试根据按用户分组的 Oracle 数据库制作 Crystal Reports 11 报告 我有超过一千个用户 我想创建一个参数字段 提示用户选择他们想要查看其结果的用户 但是我的参数选择字段仅显示 221 个可能的用户 由于 SQL
  • 如何捕获 PL/SQL 块中的唯一约束错误?

    假设我有一个 Oracle PL SQL 块 它将一条记录插入表中 并且需要从唯一约束错误中恢复 如下所示 begin insert into some table some values exception when update som
  • 将整数值从数据库列转换为Oracle中的文本

    我对数据库有一个要求 1 表ABC 列 check amount number number 18 4 这基本上包含例如支票金额 3000 50 支付给雇员 现在签发了一张支票 该支票包含数字和文本形式的 check amount 例如 支
  • Oracle中表的列重新排序

    我有一个包含 50 多列的表 我需要交换前两列的顺序 使用 Oracle 实现此目的的最佳方法是什么 假设表名是 ORDERDETAILS 前两列是 ITEM ID 和 ORDER ID 重命名完成后 表名仍应为 ORDERDETAILS
  • 运行 Sqoop 导入和导出时如何找到最佳映射器数量?

    我正在使用 Sqoop 版本 1 4 2 和 Oracle 数据库 运行 Sqoop 命令时 例如这样 sqoop import fs
  • MySQL 中有“connect by”替代方案吗?

    如果我使用 Oracle 有connect by可用于创建分层查询的关键字 目前我正在一个项目中使用MySQL 我想知道是否有替代方案connect by在 MySQL 中 我尝试过谷歌 但到目前为止还没有结果 我想要实现的是通过一个查询从
  • SVG定位

    我正在使用 SVG 但在定位方面遇到了一些问题 我有一系列形状包含在g组标签 我希望像容器一样使用它 这样我就可以设置它的 x 位置 然后该组中的所有元素也会移动 但这似乎不可能 大多数人如何定位您希望串联移动的一组元素 有相对定位的概念吗
  • Postgresql存储过程中基于会话的全局变量?

    在 Oracle 的 PL SQL 中 我可以使用包定义创建基于会话的全局变量 对于 Postgresql 的 PLpg SQL 这似乎是不可能的 因为没有包 只有独立的过程和函数 以下是 PL SQL 将 g spool key 声明为全
  • 调整 Oracle 数据库以加快启动速度(闪回)

    我正在使用 Oracle 数据库 11 2 我有一个场景 我发出FLASHBACK DATABASE经常 似乎有一个FLASHBACK DATABASECycle 会重新启动数据库实例 大约需要 1 分钟 我的设置花了 7 秒 数据库很小
  • 如何在 Hibernate 中使用 Oracle 查询提示

    我试图在 Hibernate 中使用 Oracle 提示来调用强制索引 但在 Hibernate 3 6 10 Final 中没有找到任何合适的 API 我以某种方式尝试了 Hibernate 标准中的预测 proList add Proj
  • MySQL中是否有类似Oracle中“level”的函数[重复]

    这个问题在这里已经有答案了 我面临一个场景 如果输入是 10 我想要一个数字序列 1 2 3 10 在甲骨文中levelfunction 提供了该功能 我想知道如何在 MySQL 中执行相同的任务 谢谢 您可以在 mysql 中使用此查询
  • Power BI 中的区分大小写

    我想知道是否可以在 Power BI 中配置区分大小写 我在 Oracle 数据库中有数据 其中主键EXample不同于exampLE 但如果我想将其导入到Power BI中 就不行了 任何想法 目前 我认为最好的选择是在查询编辑器阶段为主
  • 使用绑定和空值命中 Oracle 索引的最佳查询

    我有一个表 该表在多个列上有一个索引 其中许多列可以为空 CREATE UNIQUE INDEX UX MYTABLE A B C D E ON MYTABLE A B C D E 现在 我在 C 代码中尝试检查该表并精确命中索引 对于每个
  • sql server GO 相当于 oracle

    我正在为 Oracle 编写迁移脚本 我需要更改表结构 然后用数据填充它 我想先进行结构更改 然后再进行数据更改 在 SQL Server 中我会使用GO分离批次 是否有 SQL ServerGOOracle 中的等效命令 It s and
  • SSRS。如何在table1_Details_Group右侧创建新的行组?

    我正在使用 Microsoft Visual Studio 2013 创建报告 PROBLEM 如果我添加新的Row Group前面会自动添加table1 Details Group 问题 如何更改组的顺序或在右侧添加新组table1 De
  • 如何打印Oracle中过程的定义?

    oracle中有没有办法查看过程的结构是什么 我正在尝试记录并运行程序 并希望将实际的程序结构存储在我的日志中 您可以查询ALL SOURCE table SELECT text FROM all source WHERE owner lt
  • 使用 JPA 时如何在部署时设置序列的架构名称?

    出于安全原因 我们的 Oracle 数据库对象通常属于与登录用户不同的架构 例如 表位于 xx core 中 我们登录的用户是 xx app yy 在我的 persistence xml 中 我定义了一个 orm 文件 以便我可以在部署时指
  • 如何在 Oracle 中列出活动/打开的连接?

    是否有任何隐藏表 系统变量或其他东西可以显示给定时刻的活动连接 Use the V SESSION http docs oracle com cd B19306 01 server 102 b14237 dynviews 2088 htm
  • APEX:从临时表下载 BLOB

    我正在尝试使用 Oracle APEX 4 1 1 构建一个简单的查看应用程序 要显示的信息位于与包含 APEX 应用程序访问的架构的数据库不同的数据库上的表中 使用视图 View 访问此远程表 远程表视图 和数据库链接 视图按预期工作 包

随机推荐