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 操作。

例如以下查询结果:

查询语句

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

例如以下查询结果。

查询语句

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

例如以下查询结果:

查询语句

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中出现的某一列

例如以下查询结果:

查询语句

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中出现的列。

查询结果例如以下:

查询语句

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去除反复组

查询结果例如以下:

查询语句

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

group by 拓展的更多相关文章

  1. 3-11 group操作拓展

    In [1]: import pandas as pd import numpy as np df=pd.DataFrame({'A':['foo','bar','foo','bar', 'foo', ...

  2. iOS 多线程 浅述

    什么是进程? 进程是指在系统中正在运行的一个应用程序. 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内. 什么是线程? 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程 ...

  3. Android Vector曲折的兼容之路

    Android Vector曲折的兼容之路 两年前写书的时候,就在研究Android L提出的Vector,可研究下来发现,完全不具备兼容性,相信这也是它没有被广泛使用的一个原因,经过Google的不 ...

  4. Android Drawable Mipmap Vector使用及Vector兼容

    原文地址:http://blog.csdn.net/eclipsexys/article/details/51838119 http://blog.csdn.net/qq_15545283/artic ...

  5. [源码解析] 模型并行分布式训练 Megatron (4) --- 如何设置各种并行

    [源码解析] 模型并行分布式训练 Megatron (4) --- 如何设置各种并行 目录 [源码解析] 模型并行分布式训练 Megatron (4) --- 如何设置各种并行 0x00 摘要 0x0 ...

  6. Junit4拓展工具JCategory与Testng的Group功能比较

    前言 笔者前段时间分享过一遍文章,关于如何通过引入新注解来扩展Junit4,以解决Process上的问题: JUnit扩展:引入新注解Annotation 最近在跟外面的同事聊的时候,得知Testng ...

  7. mysql基础语法及拓展到web中的sql注入

    本来是想写下javaweb的mvc(tomcat, spring, mysql)的搭建,  昨天搭到凌晨3点, 谁知道jdbcTemplate的jar包不好使, 想死的心都有了, 想想还是休息一下, ...

  8. 深入解读Python的unittest并拓展HTMLTestRunner

    unnitest是Python的一个重要的单元测试框架,对于用Python进行开发的同事们可能不需要对他有过深入的了解会用就行,但是,对于自动化测试人员我觉得是要熟知unnitest的执行原理以及相关 ...

  9. MySQL拓展操作

    MySQL除了基本的增删该查功能,还有以下拓展功能: create table t1( id int ...., num int, xx int, unique 唯一索引名称 (列名,列名), con ...

随机推荐

  1. 关于matlab中画图放大局部细节的问题

    1)需要用得到一个matnify.m文件,下载地址magnify 2)接下来就是如何使用magnify的问题,参见使用 只是在“使用”中的第二步之前首先要用cd进入magnify所在位置.

  2. 采用NoteExpress参考文献导入和导出

    1.NoteExpress使用 该软件分为企业版和个人版,但目前看来个人版已经不能用了,我用的是我们学校购买的软件,感觉还是很方便的. (1)首先建立数据库: (2)可以通过导入原文选项将下载好的文章 ...

  3. jmeter 写正则表达式

    ():括起来的部分就是要提取的. .:匹配任何字符串. +:一次或多次. ?:不要太贪婪,在找到第一个匹配项后停止.   需要根据要取的数据取值 jt: eyJhbGciOiJSUzI1NiJ9.ey ...

  4. Centos7编译opencv3.4.1

    Centos7编译opencv3.4.1 参考博客 https://blog.csdn.net/wjbwjbwjbwjb/article/details/79111996 1.配置epel源 yum ...

  5. java中的hashmap理解

    转自大神,以便以后翻阅http://www.cnblogs.com/whgk/p/6091316.html

  6. Tomcat服务器安装及配置

    一.JDK环境安装 1.tomcat服务器需要在已安装JDK的环境下才能正确安装并运行,首先到Java官网下载jdk 先同意协议,再下载对应的版本(我的系统是Windows10 64位) 2.下载完成 ...

  7. 剑指offer7~10题

    斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 思路:此题用递归会超内存,故直接循环. 代码: class Solution { pub ...

  8. 关于修改banner信息;nginx反向代理apache应用

    本周实验 1. Linux下Apache部署一个php页面,返回http数据包中查看server信息,修改Apache 配置使server banner自定义. 2. nginx设置反向代理,代理上面 ...

  9. IIC详解

    (1)概述 I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距 ...

  10. 编译原理作业(第一次)-完成retinf.c(阉割版)

    首先,作业要求概括如下: 根据前缀表达式文法,实现statements() 和expression() 两个函数. 并且要求使得语义分析在完成分析前缀表达式并输出中间代码的同时,也能够将前缀表达式翻译 ...