2019独角兽企业重金招聘Python工程师标准>>>

开篇一笑:两个男人在饭店里边吃饭边聊天,甲:“我不得不在这儿吃饭,因为我妻子不想做饭。”乙:“您真幸运,我之所在这吃饭,是因为我妻子一定要做饭。”


为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的。
现在客户的需求是统计部门中每种工作的工资总额,最后还需要统计所有人的工资总数,相信这样的需求对大家来说还是比较简单的,很快就能写出SQL语句,如下:

[sql] view plain copy
  1. select deptno, job, sum(sal)
  2. from scott.emp
  3. group by deptno, job
  4. order by deptno
  5. union all
  6. select null deptno, null job, sum(sal) from scott.emp;

客户拍了一下脑袋瓜(当成西瓜拍了),再统计每个部门的工资数吧。tnnd,我加一个union all搞定,修改后的SQL语句如下:

[sql] view plain copy
  1. select deptno, job, sum(sal)
  2. from scott.emp
  3. group by deptno, job
  4. union all
  5. select deptno, null job, sum(sal)
  6. from scott.emp
  7. group by deptno
  8. union all
  9. select null deptno, null job, sum(sal) from scott.emp;

老师批注:为什么要写的这么啰嗦呢?其实有更简介的语句可以实现同样的功能,看好了:

[sql] view plain copy
  1. select deptno, job, sum(sal) from scott.emp group by rollup(deptno, job);

客户的需求就好像肾虚的人尿频一样(谁说客户是上帝,上帝哪来那么多的需求?),再统计每个工作类型的工资总额吧。tnnd,我再加一个union all再搞定,修改后的SQL语句如下:

[sql] view plain copy
  1. select deptno, job, sum(sal)
  2. from scott.emp
  3. group by deptno, job
  4. union all
  5. select deptno, null job, sum(sal)
  6. from scott.emp
  7. group by deptno
  8. union all
  9. select null deptno, job, sum(sal)
  10. from scott.emp
  11. group by job
  12. union all
  13. select null deptno, null job, sum(sal) from scott.emp;

老师再批注:老师在讲你有没有在听,根本就没有在听嘛!再教你一个简洁的SQL语句,请看:

[sql] view plain copy
  1. select grouping(job),deptno, job, sum(sal)
  2. from scott.emp
  3. group by cube(deptno, job)
  4. order by deptno;

客户想了想说,只要统计部门工资总额和工作类型工资总额就可以了(我每天都徘徊在杀人和忍住不杀之间),我fucking减掉一个union all搞定,修改后的SQL语句如下:

[sql] view plain copy
  1. select null deptno, job, sum(sal)
  2. from scott.emp
  3. group by job
  4. union all
  5. select deptno, null job, sum(sal) from scott.emp group by deptno;

老师再再批注:你小子算是彻底没救了,但我是老师啊,决不放弃任何一个学生。再再教你最后一招,仔细看下面:

[sql] view plain copy
  1. select grouping(deptno),grouping(job),grouping_id(job), deptno, job, sum(sal)
  2. from scott.emp
  3. group by grouping sets(deptno, job);

忙活半天总算把客户的需求都满足了,稍微松了一口气,不过既然学到新东西,我们有必要最后总结一下。

GROUP BY ROLLUP(A,B,C):首先对(A,B,C)进行GROUP BY,然后对(A,B)进行GROUP BY,然后是(A)进行GROUP BY, 最后对全表进行GROUP BY操作。
GROUP BY CUBE(A,B,C):首先对(A,B,C)进行GROUP BY,然后依次对(A,B)、(A,C)、(A)、(B,C)、(B)、(C)进行GROUP BY,最后对全表进行GROUP BY操作。
GROUP BY GROUPING SETS(A,B,C):依次对(C)、(B)、(A)进行GROUP BY。

转载于:https://my.oschina.net/bluesroot/blog/222464

Oracle高级查询之GROUP BY相关推荐

  1. 傅老师课堂:Oracle高级查询之GROUP BY

    为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的. 现在客户的需求是统计部门中每种工作的工资总额,最后还需要统计所有人的工资总数,相信这样的需求对大家来说还是比较简单的, ...

  2. oracle高级查询案例,oracle高级查询(实例基于scott用户四张表)

    oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ====================================================== ...

  3. Oracle高级查询之over(partition by...) 分组排序

    Oracle高级查询之over(partition by...) 分组排序 一.rank()/dense_rank() over(partition by ...order by ...) 现在客户有 ...

  4. Oracle高级查询

    使用Oracle特有的查询语法, 可以达到事半功倍的效果 1. 树查询 create table tree (     id number(10) not null primary key,      ...

  5. oracle—高级查询

    Sql基础 数据库语言 数据操纵语言:DML (data manipulation language) select insert update delete merge 数据定义语言:DDL(dat ...

  6. Oracle高级查询,over 用法

    注:标题中的红色order by是说明在使用该方法的时候必须要带上order by. 一.rank()/dense_rank() over(partition by ...order by ...) ...

  7. Oracle高级查询之over(partition by..)

    查看原文:http://ibloger.net/article/248.html 为了方便学习和测试,所有的例子都是在Oracle自带用户Scott下建立的. create table EMP (em ...

  8. 傅老师课堂:Oracle高级查询之OVER (PARTITION BY ..)

    [size=large][size=large][size=large]开篇一笑:某日一妹子对男友说:在一起这么久了你都没有夸过我漂亮,今天我要你夸夸我,男子想了一会看着女友鸡冻的说道:我硬了. 为了 ...

  9. 傅老师课堂:Oracle高级查询之OVER (PARTITION BY ..) 1

    为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的. 注:标题中的红色order by是说明在使用该方法的时候必须要带上order by. 一.rank()/dense_r ...

  10. oracle 查询最高分,oracle高级查询

    幕课oracle学习笔记 --!!!scott用户 --一.分组查询 --1.常用的分组函数:AVG(平均数),SUM,MIN,MAX,COUNT,WM_CONCAT(行转列) select avg( ...

最新文章

  1. 正确预测适合自己的职业
  2. 圣杯布局与双飞翼布局全解
  3. msm8953之串口dts配置
  4. 北斗导航 | 高精度GNSS Correction Service国际标准化
  5. jquery 判断元素显示或隐藏
  6. 【转】一句话的设计模式
  7. c语言程序设计电加热炉,基于80C52单片机的电加热数字恒温控制系统设计
  8. public,protected,private
  9. 1个月时间整理了2019年上千道Java面试题,近500页文档!
  10. JavaScript自适应图片大小的弹出窗口
  11. 《非常网管:网络管理从入门到精通(修订版)》一1.4 TCP/IP
  12. 果园机器人作文开头_果园机器人作文
  13. Xcode dSYM 文件
  14. Cisco ISO 计划命令 kron实现配置定时自动备份
  15. 智慧养老整体解决方案
  16. access 数据库写按日期查询SQL
  17. xman 2018夏solo题
  18. SAP-PP 主生产计划MPS
  19. 阅读笔记:双核心Opteron处理器
  20. C++STL之map详解

热门文章

  1. c语言200行代码大作业含菜单,2018级C语言大作业 - 坦克动荡
  2. java 命令行 库_java以太坊库web3j文档
  3. layui多文件上传讲解_layui文件上传的实际应用实例
  4. Idea Debug多线程不进断点问题处理
  5. npm 常见用法小结
  6. MFC选择目录和多个文件
  7. 《音乐达人秀:Adobe Audition实战200例》——实例5 将电视音乐节目伴音转录到电脑里...
  8. [Asp.Net web api]基于自定义Filter的安全认证
  9. 如何利用ansible callback插件对执行结果进行解析
  10. 说说IUnitOfWork~DbContext对象的创建应该向BLL层公开