对GROUP BY的增强

news2025/7/27 21:48:33
  • 使用ROLLUP操作产生求和值
  • 使用CUBE操作产生
  • 使用GROUPING函数确定该行值是由ROLLUP或者CUBE创建的
  • 使用GROUPING SETS生成一个简单的结果集

[oracle@oracle-db-19c ~]$ 
[oracle@oracle-db-19c ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Nov 18 10:19:05 2022
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> 
SQL> alter session set container=PDB1;

Session altered.
SQL> show con_name

CON_NAME
------------------------------
PDB1
SQL> 
SQL> 
SQL> conn scott/tiger@PDB1
Connected.
SQL> 
SQL> show user
USER is "SCOTT"
SQL> 
SQL> 
SQL> set pagesize 200
SQL> set linesize 200
SQL> select * from emp;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7788 SCOTT      ANALYST         7566 24-JAN-87       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
      7876 ADAMS      CLERK           7788 02-APR-87       1100                    20
      7900 JAMES      CLERK           7698 03-DEC-81        950                    30
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

14 rows selected.

SQL> select deptno,sum(sal) from emp group by deptno;

    DEPTNO   SUM(SAL)
---------- ----------
        30       9400
        10       8750
        20      10875

SQL> select deptno,sum(sal) from emp having sum(sal)>9000 group by deptno;

    DEPTNO   SUM(SAL)
---------- ----------
        30       9400
        20      10875

SQL> select deptno,job,sum(sal) from emp group by deptno,job;

    DEPTNO JOB         SUM(SAL)
---------- --------- ----------
        20 MANAGER         2975
        20 ANALYST         6000
        10 PRESIDENT       5000
        10 CLERK           1300
        30 SALESMAN        5600
        10 MANAGER         2450
        20 CLERK           1900
        30 MANAGER         2850
        30 CLERK            950

9 rows selected.

SQL> select deptno,job,sum(sal) from emp group by deptno,job order by 1,2;

    DEPTNO JOB         SUM(SAL)
---------- --------- ----------
        10 CLERK           1300
        10 MANAGER         2450
        10 PRESIDENT       5000
        20 ANALYST         6000
        20 CLERK           1900
        20 MANAGER         2975
        30 CLERK            950
        30 MANAGER         2850
        30 SALESMAN        5600

9 rows selected.

SQL> 

带有ROLLUP和CUBE运算符的GROUP BY

  • 带有ROLLUP或者CUBE的GROUP BY 会通过交叉参考列产生一个超级总计行
  • ROLLUP分组生成一个结果集,包含有通常的分组行和求和值
  • CUBE分组生成一个结果集,包含从ROLLUP里面的行和交叉表行。
SQL> select deptno,job,sum(sal) from emp group by rollup(deptno,job) order by 1,2;

    DEPTNO JOB         SUM(SAL)
---------- --------- ----------
        10 CLERK           1300
        10 MANAGER         2450
        10 PRESIDENT       5000
        10                 8750
        20 ANALYST         6000
        20 CLERK           1900
        20 MANAGER         2975
        20                10875
        30 CLERK            950
        30 MANAGER         2850
        30 SALESMAN        5600
        30                 9400
                          29025

13 rows selected.

SQL>

SQL> select deptno,job,sum(sal) from emp group by deptno,job
  2  union all
  3  select deptno,null,sum(sal) from emp group by deptno
  4  union all
  5  select null,null,sum(sal) from emp;

    DEPTNO JOB         SUM(SAL)
---------- --------- ----------
        20 MANAGER         2975
        20 ANALYST         6000
        10 PRESIDENT       5000
        10 CLERK           1300
        30 SALESMAN        5600
        10 MANAGER         2450
        20 CLERK           1900
        30 MANAGER         2850
        30 CLERK            950
        30                 9400
        10                 8750
        20                10875
                          29025

13 rows selected.

SQL>  

rollup(a,b,c)

group by a

union all

group by a,b

union all

group by a,b,c

union all

total


cube(a,b,c)

group by a

union all

group by b

union all

group by c

union all

group by a,b

union all

group by a,c

union all

group by b,c

union all

group by a,b,c

union all

total

SQL> 
SQL> select deptno,job,sum(sal) from emp group by deptno,job
  2  union all
  3  select deptno,null,sum(sal) from emp group by deptno
  4  union all
  5  select null,null,sum(sal) from emp;

Execution Plan
----------------------------------------------------------
Plan hash value: 1761893045

----------------------------------------------------------------------------
| Id  | Operation           | Name | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |      |    15 |   190 |    11  (19)| 00:00:01 |
|   1 |  UNION-ALL          |      |       |       |            |          |
|   2 |   HASH GROUP BY     |      |    11 |   165 |     4  (25)| 00:00:01 |
|   3 |    TABLE ACCESS FULL| EMP  |    14 |   210 |     3   (0)| 00:00:01 |
|   4 |   HASH GROUP BY     |      |     3 |    21 |     4  (25)| 00:00:01 |
|   5 |    TABLE ACCESS FULL| EMP  |    14 |    98 |     3   (0)| 00:00:01 |
|   6 |   SORT AGGREGATE    |      |     1 |     4 |            |          |
|   7 |    TABLE ACCESS FULL| EMP  |    14 |    56 |     3   (0)| 00:00:01 |
----------------------------------------------------------------------------

SQL> select deptno,job,sum(sal) from emp group by rollup(deptno,job) order by 1,2;

Execution Plan
----------------------------------------------------------
Plan hash value: 52302870

-----------------------------------------------------------------------------
| Id  | Operation            | Name | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |      |    11 |   165 |     4  (25)| 00:00:01 |
|   1 |  SORT GROUP BY ROLLUP|      |    11 |   165 |     4  (25)| 00:00:01 |
|   2 |   TABLE ACCESS FULL  | EMP  |    14 |   210 |     3   (0)| 00:00:01 |
-----------------------------------------------------------------------------

SQL> 

GROUPING函数

SQL> 
SQL> select deptno,job,sum(sal),grouping(deptno),grouping(job) from emp group by rollup(deptno,job);

    DEPTNO JOB         SUM(SAL) GROUPING(DEPTNO) GROUPING(JOB)
---------- --------- ---------- ---------------- -------------
        10 CLERK           1300                0             0
        10 MANAGER         2450                0             0
        10 PRESIDENT       5000                0             0
        10                 8750                0             1
        20 CLERK           1900                0             0
        20 ANALYST         6000                0             0
        20 MANAGER         2975                0             0
        20                10875                0             1
        30 CLERK            950                0             0
        30 MANAGER         2850                0             0
        30 SALESMAN        5600                0             0
        30                 9400                0             1
                          29025                1             1

13 rows selected.

SQL> 
SQL> select decode(grouping(deptno)||grouping(job),'01','Subtotal ' || deptno,'11','Total',deptno) deptno,job,sum(sal) from emp group by rollup(deptno,job);

DEPTNO                                            JOB         SUM(SAL)
------------------------------------------------- --------- ----------
10                                                CLERK           1300
10                                                MANAGER         2450
10                                                PRESIDENT       5000
Subtotal 10                                                       8750
20                                                CLERK           1900
20                                                ANALYST         6000
20                                                MANAGER         2975
Subtotal 20                                                      10875
30                                                CLERK            950
30                                                MANAGER         2850
30                                                SALESMAN        5600
Subtotal 30                                                       9400
Total                                                            29025

13 rows selected.

SQL> 

SQL> select decode(grouping(deptno)||grouping(job),'01','Subtotal ' || deptno,'11','Total',deptno) deptno,job,sum(sal),grouping(deptno),grouping(job) from emp group by rollup(deptno,job);

DEPTNO                                            JOB         SUM(SAL) GROUPING(DEPTNO) GROUPING(JOB)
------------------------------------------------- --------- ---------- ---------------- -------------
10                                                CLERK           1300                0             0
10                                                MANAGER         2450                0             0
10                                                PRESIDENT       5000                0             0
Subtotal 10                                                       8750                0             1
20                                                CLERK           1900                0             0
20                                                ANALYST         6000                0             0
20                                                MANAGER         2975                0             0
Subtotal 20                                                      10875                0             1
30                                                CLERK            950                0             0
30                                                MANAGER         2850                0             0
30                                                SALESMAN        5600                0             0
Subtotal 30                                                       9400                0             1
Total                                                            29025                1             1

13 rows selected.

SQL> 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/16580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

idea2022.2.3版本下载安装配置(包含运行第一个java程序教程)详细步骤

目录 一、下载idea 1.去浏览器搜索idea官网,找到官网 2.选择Download 3.点击左边的Download下载就好了 4.在本地磁盘建一个文件夹,专门用来存放idea软件的 二、安装idea 5.在本地磁盘中的下载里面找到下载的idea并双击打开 6.选择Next ​编辑 7…

【无标题】PCIe收发卡设计资料原理图:611-基于VU9P的2路4Gsps AD 2路5G DA PCIe收发卡

基于VU9P的2路4Gsps AD 2路5G DA PCIe收发卡一、板卡概述 基于XCVU9P的5Gsps AD DA收发PCIe板卡。北京太速科技该板卡要求符合PCIe 3.0标准,包含一片XCVU9P-2FLGA2014I、2组64-bit/8GB DDR4、2路高速AD, 2路高速DA,支持外触发&#xff…

基于单片机的学生视力保护仪

目录 摘 要 1 ABSTRACT 2 第一章 绪论 4 1.1课题的选题背景 4 1.2国内外发展现状 5 1.3本论文主要研究内容 6 1.3.1主要内容 6 1.3.2基本要求 7 第二章 学生视力保护仪总系统设计 8 2.1系统总框图 8 2.2单片机的选择 8 2.3传感器的选择 9 2.4编程语言的选择 9 第三章 系统硬件…

CentOS 7 源码制作ngnx-1.22.1-ipv6 rpm —— 筑梦之路

源码包:http://nginx.org/packages/centos/7/SRPMS/nginx-1.22.1-1.el7.ngx.src.rpm # 安装依赖包yum install http://mirror.centos.org/centos/7/os/x86_64/Packages/pcre2-devel-10.23-2.el7.x86_64.rpm# 安装源码包 初始化项目rpm -ivh nginx-1.22.1-1.el7.ngx…

5G无线技术基础自学系列 | 物理下行控制信道

素材来源:《5G无线网络优化实践》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 2.4.1 PDCCH位置定义 在LTE中&#xff0…

ESP32的AP模式使用

WifiClient 和WebServe有啥区别? (14 封私信 / 1 条消息) httpclient 和webservice有啥区别? - 知乎 (zhihu.com) 1.Webservice两大核心:soap(理解为要传输的数据)、wsdl(理解为传输数据xml的说明) soap xml ht…

Java类变量和类方法(static)

文章目录类变量-提出问题类变量内存布局如何定义类变量如何访问类变量类变量使用细节类方法介绍类变量-提出问题 提出问题的主要目的就是让大家思考解决之道,从而引出我要讲的知识点. 说:有一群小孩在玩堆雪人,不时有新的小孩加入,请问如何知道现在共有…

客服系统Golang源码

客服系统 概述 采用Golang语言,基于 gRPC [Mongo Vue3WebsocketRabbitMQ]来实现系统 用户侧逻辑采用匿名注册模式,Token采用JWT技术,服务端不保存Token信息,用户每次使用检测Token合法时返回新的Token来达到续期的目的 后端分…

kubernetes集群基于kubeadm部署以及常见问题解决

文章目录集群类型主机规划环境初始化检查操作系统版本关闭防火墙设置主机名主机名解析时间同步关闭 SELinux关闭 swap 分区将桥接的IPv4流量传递到iptables的链开启ipvs安装容器运行时(Docker)卸载Docker旧版本:安装 gcc 相关安装Docker设置阿…

Vivado_AXI Quad SPI_IP核

填一下前面的坑。 介绍关于Vivado中AXI Quad SPI v3.2的使用方法。 参考资料:pg153-axi-quad-spi.pdf,可自行在官网下载。 以该IP核的Standard SPI Mode的使用为例。 Address Space OffsetRegister NameAccess TypeDefault Value (hex)Description40hS…

【JavaSE】抽象类

前言: 作者简介:爱吃大白菜1132 人生格言:纸上得来终觉浅,绝知此事要躬行 如果文章知识点有错误的地方不吝赐教,和大家一起学习,一起进步! 如果觉得博主文章还不错的话,希望三连支持&#xff01…

知物由学 | 弹幕蜂拥而入,智能审核平台如何用技术破局?

导读:弹幕的出现增加了视频观看者的深度参与感,弹幕也逐渐成为国内各大视频网站最基本的评论交互形式,本文将通过网易易盾在弹幕实现原理及交互方式方面的实践,具体介绍弹幕相较于传统聊天室的区别与实践经验,希望能为…

【检索资讯】2022年控制理论与应用国际会议(ICOCAT 2022)已成功被EI检索

ICOCTA 2022(www.icocta.org) 2022年控制理论与应用国际会议(ICOCAT 2022)已成功被EI,Scopus检索,作者可自行登录EI数据库查询检索, ICOCTA 2023会议预告 重要信息 会议官网:www.i…

新品速看丨创新微MinewSemi正式推出GNSS高精度卫星定位导航模块

致力于GNSS、蓝牙、Wi-Fi、LoRa、UWB等物联网无线模块研究的一站式供应商——创新微MinewSemi近日推出了数款基于多种卫星导航授时、多星多频、具有低功耗、高灵敏度、抗干扰、高性能的工业级GNSS高精度定位模块。 此次推出的GNSS模块各有特点,满足用户不同需求&…

【LeetCode】用队列实现栈和用栈实现队列(C语言)

目录 1.用队列实现栈 增删 求栈顶元素 判断栈为空 2.用栈实现队列 增删 返回队列开头的数据 判断队列为空 尾言 源码 队列实现栈 栈实现队列 刚讲完栈和队列,LeetCode上有两题栈与队列的互相实现,简单地讲讲思路和实现吧。 1.用队列实现栈 原题地址&am…

婴幼儿蛋白质过敏怎么回事

很多孩子吃了含蛋白质的食物后会出现瘙痒或痱子等过敏症状,甚至全身发红。这是因为一些过敏体质的孩子儿童会对蛋白质过敏。婴儿蛋白质过敏会导致一些严重的问题,那么当婴儿蛋白质过敏发生时,该怎么以下是一个详细的介绍!目录蛋白…

[Spring Boot]08 IDEA接入MyBatisCodeHelper代码自动生成器

目录前言一、插件市场安装插件二、使用插件自动生成代码前言 上次介绍了,原生mybatis的方法: 06 Spring Boot接入mybatis通用mapper插件自动生成器。 这次,再介绍下插件MyBatisCodeHelper-Pro的用法,使用此方法更加简单和方便。 …

老照片修复工具哪个好?这几个修复软件你快看看

相信我们很多小伙伴的爷爷奶奶家里都会有很多老照片,这些照片由于年代久远,或多或少都会有些损坏,不是泛黄就是有些褶皱,如果我们想将照片进行流传下去,肯定就是将其修复并重新洗出来啦。要是不想出门找专业的摄影师修…

Spring Boot 整合 MyBatis Plus实现多数据源的两种方式

第一种&#xff1a;使用配置类的方式&#xff1a; 项目结构 xml依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-ins…

hadoop 3.3大数据集群搭建系列3-安装Hive

文章目录一. 下载hive二. 解压三. 添加Hive核心配置&#xff0c;选择远程MySQL模式四. 下载连接MySQL的驱动包到hive的lib目录下五. MySQL下创建hive数据库六. 执行Hive的初始化工作七. 验证初始化是否成功八. 使用hive参考:一. 下载hive cd /home/software wget https://mirr…