Oracle GROUPING SETS

2023-05-16

-- Start

大家对GROUP BY应该比较熟悉吧。还记得当初学习SQL的时候,总是理解不了GROUP BY的作用,经过好长时间才终于明白GROUP BY的真谛。当然,这和我本人笨也有关系,呵呵。下面我们先看一个例子。

CREATE TABLE employee
(
  name          NVARCHAR2(10),
  gender        NCHAR(1),
  country       NVARCHAR2(10),
  department    NVARCHAR2(10),
  salary        NUMBER(10)
);
INSERT INTO employee VALUES ('张三','男','中国','市场部',4000);
INSERT INTO employee VALUES ('李四','男','中国','市场部',5000);
INSERT INTO employee VALUES ('王五','女','美国','市场部',3000);  
INSERT INTO employee VALUES ('赵红','男','中国','技术部',2000);
INSERT INTO employee VALUES ('李白','女','中国','技术部',5000);  
INSERT INTO employee VALUES ('王蓝','男','美国','技术部',4000);

假设现在让你统计一下每个国家的平均工资和每个部门的平均工资,怎么办?我们可以使用 UNION ALL。

SELECT country, null department, round(avg(salary), 2) FROM employee GROUP BY country
UNION ALL
SELECT null country, department, round(avg(salary), 2) FROM employee GROUP BY department;

有没有更简单的方法呢?答案是肯定的。

SELECT country, department, round(avg(salary), 2) FROM employee GROUP BY GROUPING SETS (country, department);

怎么样?是不是很简单。从上面的例子我们可以得到下面的等价关系。

GROUP BY GROUPING SETS (A,B,C)  等价与  GROUP BY A  
                                        UNION ALL  
                                        GROUP BY B  
                                        UNION ALL  
                                        GROUP BY C

我们还可以使用括号。

GROUP BY GROUPING SETS ((A,B,C))  等价与  GROUP BY A,B,C  
   
   
GROUP BY GROUPING SETS (A,(B,C))  等价与  GROUP BY A  
                                          UNION ALL  
                                          GROUP BY B,C

我们还可以在一个GROUP BY语句中多次使用GROUPING SETS,如下:

GROUP BY GROUPING SETS (A)  等价于  GROUP BY A,B,C  
        ,GROUPING SETS (B)  
        ,GROUPING SETS (C)  
   
   
GROUP BY GROUPING SETS (A)  等价于  GROUP BY A,B,C  
        ,GROUPING SETS ((B,C))   
   
   
GROUP BY GROUPING SETS (A)  等价于  GROUP BY A,B  
        ,GROUPING SETS (B,C)        UNION ALL  
                                    GROUP BY A,C

我们还可以混合使用,如下:

GROUP BY A                     等价于  GROUP BY A  
        ,B                                     ,B  
        ,GROUPING SETS ((B,C))                 ,C  
   
   
GROUP BY A                    等价于  GROUP BY A,B,C  
        ,B                            UNION ALL  
        ,GROUPING SETS (B,C)          GROUP BY A,B  
   
   
GROUP BY A                    等价于 GROUP BY A,B,C  
        ,B                           UNION ALL  
        ,C                           GROUP BY A,B,C  
        ,GROUPING SETS (B,C) 

--更多参见:Oracle SQL 精萃

-- 声明:转载请注明出处

-- Last edited on 2015-02-28

-- Created by ShangBo on 2015-02-28

-- End


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

Oracle GROUPING SETS 的相关文章

  • 无法在 JDBCPreparedStatement 中使用 LIKE 查询吗?

    查询代码及查询方式 ps conn prepareStatement select instance id from eam measurement where resource id in select RESOURCE ID from
  • SQL 连接中的多个条件

    如何指定多个条件SQL加入 我知道A key B key除此之外是强制性的 以下对于指定多个条件是否正确SQL ON A key B key and or cond1 and or cond2 etc OR ON A key B key w
  • SQL Server T-SQL 中的 REGEXP_LIKE 转换

    我在一份需要转换为 SQL Server 的旧报告中遇到了这一行 REGEXP LIKE examCodes learner code examCodes 是源 learner code 是模式 我知道 SQL Server 没有 REGE
  • Oracle 中的 TO_Char 数字格式模型

    我不完全理解如何使用 to char 函数将数字转换为具有适当格式模型的字符串 实际数字具有以下格式 使用逗号作为小数点分隔符 始终为 5 个小数 整数最多可达 6 可能是无限的 但目前绝不会超过 6 数字可以是正数或负数 数字可以以 0
  • postgresql 中带有分组的嵌套聚合函数

    我正在尝试使用嵌套聚合函数和分组来获得总和的平均值 我想做的是 SELECT AVG SUM x GROUP BY y WHERE GROUP BY 也就是说 对于返回的每一行 我希望其中一个字段是总和的平均值 其中每个总和都位于 y 相同
  • sql 查询查找匹配属性

    我目前正在做一个类似易货系统的系统 情况是这样的 客户 Jasmine 要求输入 NAME 属性 她需要寻找的内容 并输入 SEEK 属性 她需要寻找的内容 为了获得结果 SEEK 属性必须与其他客户的 Name 属性匹配 其他客户的 SE
  • 使用 Oracle 中的 Join 查询进行更新

    查询有什么问题 它无限期地执行 UPDATE table1 t1 SET t1 col t1 Output SELECT t2 col t3 Output t2 col FROM tabl2 t3 LEFT JOIN table1 t2 O
  • 获取 Oracle JDBC 连接上的 MySQL 错误堆栈跟踪

    我在使用连接字符串进行 Oracle JDBC 连接时遇到非常奇怪的错误 我将用户名指定为 sys 应该是 sys as sysdba 理想情况下 它应该来自 ojdbc6 jar 但就我而言 它来自 mysql connector jav
  • 为什么我的层次结构查询显示重复记录?

    我的要求是找到一个月中所有过去的天数 以下是我的示例查询 CREATE TABLE custom date full sno NUMBER curr date DATE INSERT INTO custom date full VALUES
  • Oracle:PL/SQL 中查看值是否存在的最快方法:列表、VARRAY 或临时表

    UPDATE如果您想查看很长的原始问题 请查看编辑 这是问题的更清晰的简短版本 我需要看看是否GroupA 不总是GroupA 这会改变每个循环迭代 存在于大约 200 个组的 列表 数组 临时表 等等 中 如何存储这 200 个组完全由我
  • 无效号码错误!似乎无法绕过它

    Oracle 10g 数据库 我有一张桌子叫s contact 这个表有一个字段叫做person uid This person uid字段是 varchar2 但包含某些行的有效数字和其他行的无效数字 例如 一行可能有一个person u
  • 如何在C#中确定现有的oracle数据库连接?

    假设我使用正确的凭据调用以下方法 private bool Connect string username string password string CONNSTRING Provider MSDAORA Data Source ISD
  • 为什么Mysql的Group By和Oracle的Group by行为不同

    为什么Mysql的Group By和Oracle的Group by行为不同 我多次发现 Mysql group By 功能和 Oracle 的 GroupBy 功能表现不同 很多时候我在Oracle中发现错误 这实际上是错误的查询 但是My
  • 神秘的 getClobVal()

    我有一个表 AKADMIN 其中包含 XMLTYPE 列 其名称为 XML 我想在该列中使用 getClobVal select t xml getClobVal t xml getClobVal t xml getClobVal as c
  • R中不同级别的李克特分组

    我想使用 Likert 包 并按变量分组并绘制结果 问题是我想要可视化的变量有不同的级别 有没有解决的办法 一个简单的例子来说明我的问题 library reshape library likert foo lt data frame ca
  • Oracle - 仅当不存在时才创建索引

    有没有什么方法可以在oracle中创建索引 只有当它们不存在时 就像是 CREATE INDEX IF NOT EXISTS ord customer ix ON orders customer id 仅当索引不存在时添加索引 declar
  • 在 Oracle SQL 中执行 MERGE 时,如何更新 SOURCE 中不匹配的行?

    我有一个main数据库和一个report数据库 我需要同步一个表main into report 但是 当项目在main数据库 我只想设置一个IsDeleted标志在report数据库 执行此操作的优雅方法是什么 我目前正在使用 MERGE
  • 数据库的创建日期

    这是一个问题 起源于this https stackoverflow com questions 2522626 check how old an oracle database is 2523227 2523227杰米提出的问题 我想我会
  • 如何在sql中提取周数

    我有一个 varchar2 类型的转换列 其中包含以下主菜 01 02 2012 01 03 2012 etc 我使用 to date 函数将其转换为另一列中的日期格式 这是我得到的格式 01 JAN 2012 03 APR 2012 当我
  • 如何使用 Hibernate Session.doWork(...) 进行保存点/嵌套事务?

    我正在使用 JavaEE JPA 托管事务与 Oracle DB 和 Hibernate 并且需要实现某种嵌套事务 据我所知 此类事情不受开箱即用的支持 但我应该能够为此目的使用保存点 正如建议的https stackoverflow co

随机推荐

  • linux 服务器时钟同步设置

    linux 服务器时钟同步设置 1 背景2 简介3 环境4 安装及配置5 配置使用5 1 服务端配置5 1 1 修改配置5 1 2 开启同步5 1 3 防火墙策略配置 5 2 客户端配置5 2 1 修改配置5 2 2 开启同步 5 3 ch
  • 电脑安装双系统-linux系统上安装windows系统

    电脑安装双系统 1 背景2 环境3 思路4 操作步骤4 1 安装gparted4 2 设置windows安装驱动器4 3 安装windows10操作系统4 4 设置开机引导 1 背景 电脑安装的elementary OS 5 1 7 基本能
  • MacOS配置iterm2漂亮实用的主题

    效果预览 注意事项 需要oh my zsh请自行安装 安装该主题需要的字体文件 cd git clone https github com powerline fonts git depth 61 1 cd fonts install sh
  • 使用python 将excel中数据批量生成word周报

    使用python 将excel中数据调用word模板批量生成word周报 背景环境功能需求程序实现 背景 日常项目中每周需要召开项目周会 xff0c 会议纪要和会议周报是必不可少的一项内容 xff0c 会议纪要要求监理方会后发送给参会方成员
  • 自动化运维-批量安装Linux操作系统

    自动化运维 批量安装Linux操作系统 1 背景2 Cobbler基础2 1 Cobbler介绍2 2 Cobbler服务 3 系统环境3 1 系统环境3 2 网络环境3 2 1 实体机网络设置3 2 2 虚拟机网络设置3 2 2 1 VM
  • linux操作系统中业务程序及服务的开机启动

    linux操作系统中业务程序及服务的开机启动设置 1 背景2 目标3 启动类型3 1 服务启动systemctl3 2 服务启动chkconfig3 2 1 查看服务3 2 2 系统自带服务的设置3 2 3 添加服务设置 3 3 开机启动脚
  • Thinkpad X201i笔记本电脑开机Fan Error

    Thinkpad X201i笔记本电脑开机Fan Error 1 背景2 现象3 更换风扇3 1 准备工具3 2 开始拆机 1 背景 家里的老笔记本电脑 xff0c thinkpad X201i笔记本电脑 xff0c 一直在使用 xff0c
  • Linux操作系统安装MySQL(rpm安装)

    Linux操作系统安装MySQL xff08 rpm安装 xff09 1 背景2 环境说明3 准备工作3 1 端口查看3 2 检查安装3 3 创建MySQL用户和组 4 MySQL安装4 1 下载MySQL4 2 解压安装包4 3 安装My
  • MySQL配置数据库审计

    MySQL配置数据库审计 1 背景2 环境3 准备工作4 安装审计4 1 解压审计包4 2 查看数据库插件目录4 3 安装数据库审计插件4 3 1 复制到插件目录4 3 2 修改插件权限4 3 3 设置审计参数4 3 4 修改数据库审计配置
  • [漏洞修复]Docker runc容器逃逸漏洞(CVE-2021-30465)

    漏洞修复 Docker runc容器逃逸漏洞CVE 2021 30465 1 背景2 漏洞描述3 影响版本4 安全版本5 修复建议6 升级影响7 修复步骤 1 背景 2021年5月31日 xff0c 阿里云应急响应中心监测到国外安全研究人员
  • linux系统挂载硬盘

    linux系统挂载硬盘 1 背景2 环境3 准备工作4 挂载分区4 1 查看分区信息4 2 创建分区4 3 设置分区格式4 4 创建挂载目录4 5 挂载分区4 6 设置开机自动挂载4 7 验证是否挂载成功 1 背景 日常使用过程中随着系统业
  • ACFLY接口定义

    E的接口在原理图中可以找到 xff0c 看上去像是I2C的接口 xff0c 其实是SPI xff0c 因为ACFLY采购的屏它就是这么标接口的 不过我想把这个SPI接口让给LORA无线通信模块 xff0c 拓展一下无线功能 ACFLY板子是
  • FreeRTOS之Stream Buffers(流缓冲区)

    ACFly用到了Steam Buffers xff0c 特地调了3个最常见的API查了一下 xff0c 其他的API都和这些差不多 Steam Buffers 是最近几版本Freertos出现的数据结构 xStreamBufferCreat
  • python3使用自带venv创建虚拟环境及vscode配置

    使用自带venv创建虚拟环境 python3 3后支持 mkdir env python3 m venv env 或 mkdir env cd env python3 m venv 使用virtualenv创建虚拟环境 pip instal
  • 【恶软检测】【防】Deep neural network based malware detection using two dimensional binary program features

    使用二维二进制程序特征的基于深度神经网络的恶意软件检测 作者是Saxe J xff0c Berlin K 2015 年发表在10th International Conference on Malicious and Unwanted So
  • 【生成对抗样本】Simple Black-Box Adversarial Attacks on Deep Neural Networks

    对深度神经网络的简单黑盒对抗性攻击 作者 xff1a Narodytska N xff0c Kasiviswanathan S 2017年发表在IEEE Computer Society Conference on Computer Vis
  • 【恶意软件检测】【防】On Training Robust PDF Malware Classifiers

    论文链接 xff1a https arxiv org pdf 1904 03542 pdf 开源项目地址 xff1a https github com surrealyz pdfclassifier本文发表在USENIX Security
  • 【恶软】【对抗】【攻】Adversarial Malware Binaries: Evading Deep Learning for Malware Detection in Executables

    作者是Bojan Kolosnjaji Ambra Demontis等 2018年发表在European Signal Processing Conference 一 主要内容 xff1a 在本文中 xff0c 我们调查了使用深层网络从原始
  • 【综述】对抗样本生成及攻防技术综述

    作者是电子科技大学的刘小垒等 xff0c 2019年发表在计算机应用研究 主要内容 xff1a 以机器学习的安全性问题为出发点 xff0c 介绍了当前机器学习面临的隐私攻击 完整性攻击等安全问题 xff0c 归纳了目前常见对抗样本生成方法的
  • Oracle GROUPING SETS

    Start 大家对GROUP BY应该比较熟悉吧 还记得当初学习SQL的时候 xff0c 总是理解不了GROUP BY的作用 xff0c 经过好长时间才终于明白GROUP BY的真谛 当然 xff0c 这和我本人笨也有关系 xff0c 呵呵