1、group by的使用

--根据DEPTNO和JOB进行分组。求相同DEPTNO,相同JOB的员工工资总和。

SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY E.DEPTNO,E.JOBORDER BY E.DEPTNO

结果:

2、group by 配合rollup的使用

rollup()--可以使用一个或者多个参数。意思是从右向左进行数据的汇总统计,并生成一行,rollup是个统计函数。

是根据分组情况进行统计,最终进行全部汇总。

(1)、简单的使用rollup--生成一行新数据。(要生成新的一行数据,还可以使用UNION ALL)

1 SELECT D.DUMMY FROM DUAL D2 GROUP BY ROLLUP(D.DUMMY)

结果:

(2)先根据E.DEPTNO,E.JOB进行分组,根据从右向左的条件,

1 SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.DEPTNO,E.JOB)2 ORDER BY E.DEPTNO

结果:

针对以上的使用ROLLUP的结果的理解:

a:首先根据GROUP BY E.DEPTNO,E.JOB查询出9条数据(除4,8,12,13外),在根据rollup的定义:

从右向左,对ROLLUP中的参数进行小计:

首先根据JOB(对所有的JOB进行汇总),汇总出4,8,12行,在根据E.DEPTNO(对所有的DEPTNO进行汇总),汇总出

第十三行数据。

例如:GROUP BY ROLLUP(E.DEPTNO,E.JOB,E.ENAME)---

首先:根据GROUP BY(E.DEPTNO,E.JOB,E.ENAME),查询,

其次:E.ENAME--汇总,相同DEPTNO和相同的JOB

再次:E.JOB--汇总,相同的部门

最后:E.DEPTNO--汇总

可以实际操作理解其意义。

rollup(a,b)   统计列包含:(a,b)、(a)、()
rollup(a,b,c) 统计列包含:(a,b,c)、(a,b)、(a)、()

(3)、特殊情况-----

1 SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.DEPTNO,E.JOB)2 ORDER BY E.DEPTNO

结果:

理解:首先根据

GROUP BY E.DEPTNO,E.JOB查询出前九条数据,

其次:对E.DEPTNO进行汇总,但是必须考虑JOB,也就是

相同的JOB,的所有的工资总和:

所以出现下面五条数据。

 3、group by 配合cube的使用

1 SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY CUBE(E.DEPTNO,E.JOB)2 ORDER BY E.DEPTNO

理解:CUBE会对条件中的每一个条件进行单独的汇总:即对单独的列进行汇总

GROUP BY CUBE(E.DEPTNO,E.JOB)

首先根据:GROUP BY E.DEPTNO,E.JOB查询数据

其次:对E.JOB进行汇总(不考虑DEPTNO,单独汇总,而ROLLUP是在同一个DEPTNO下面)

再次::对E.DEPTNO进行汇总

最后,全部汇总
 cube(a,b)     统计列包含:(a,b)、(a)、(b)、()

 cube(a,b,c)   统计列包含:(a,b,c)、(a,b)、(a,c)、(b,c)、(a)、(b)、(c)、()

3、GROUPING 的使用

GROUPING函数可以接受一列,返回0或者1。如果列值为空,那么GROUPING()返回1;如果列值非空,那么返回0。GROUPING只能在使用ROLLUP或CUBE的查询中使用。当需要在返回空值的地方显示某个值时,GROUPING()就非常有用。

1 SELECT GROUPING(E.DEPTNO), E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.DEPTNO,E.JOB)2 ORDER BY E.DEPTNO

结果:

可以使用decode或者case函数进行转换这种不友好的显示:

 1 SELECT  2 CASE WHEN grouping(E.DEPTNO) = 1 3 THEN '总计' 4 ELSE E.DEPTNO || '' 5 END AS 部门, 6 CASE WHEN grouping(E.JOB) = 1 AND grouping(E.DEPTNO) = 0 7 THEN '小计' 8 ELSE E.JOB 9 END AS 工作种类,10 SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.DEPTNO,E.JOB)11 ORDER BY E.DEPTNO

结果:

 1 SELECT DECODE(GROUPING(E.DEPTNO), 1, '总计', E.DEPTNO) AS 部门, 2 CASE 3 WHEN GROUPING(E.JOB) = 1 AND GROUPING(E.DEPTNO) = 0 THEN 4 '小计' 5 ELSE 6 E.JOB 7 END AS 工作种类, 8 SUM(E.SAL) 9 FROM EMP E10 GROUP BY ROLLUP(E.DEPTNO, E.JOB)11 ORDER BY E.DEPTNO

结果:

grouping sets提供了指定汇总集合条件的功能。

SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY GROUPING SETS(E.DEPTNO,E.JOB)

结果:--根据E.DEPTNO,E.JOB分别汇总数据

转载于:https://www.cnblogs.com/caroline/archive/2011/12/10/2283353.html

oralce分析函数---group by || rollup || cude || grouping || grouping sets相关推荐

  1. mysql group by cube_group by、grouping sets、with rollup、with cube方法

    场景 在编写报表的 sql 脚本的时候,可能会遇到多维度组合的情况,例如下面的情况.常规的做法是编写不同维度组合的 sql ,然后再使用 union all 进行全集(当分组维度数量比较多的时候,un ...

  2. group by rollup 和grouping的使用实例

    GROUPING函数可以接受一列,返回0或者1.如果列值为空,那么GROUPING()返回1:如果列值非空,那么返回0.GROUPING只能在使用ROLLUP或CUBE的查询中使用.当需要在返回空值的 ...

  3. SQLSERVER中的ALL、PERCENT、CUBE关键字、ROLLUP关键字和GROUPING函数

    SQLSERVER中的ALL.PERCENT.CUBE关键字.ROLLUP关键字和GROUPING函数 先来创建一个测试表 1 USE [tempdb] 2 GO 3 4 CREATE TABLE # ...

  4. SAP RETAIL 维护Plant Profile 报错 - No customer account group assigned to business partner grouping ZNM2

    SAP RETAIL 维护Plant Profile 报错 - No customer account group assigned to business partner grouping ZNM2 ...

  5. group by rollup | cube 学习

    1.如果是ROLLUP(A, B, C)的话,首先会对(A.B.C)进行GROUP BY,然后对(A.B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作. ...

  6. oracle按层级分组,oracle按照指定列分组合计group by rollup()

    group by rollup() 按分组合计 select grouping(status),status,owner,object_type,count(*) from dba_objects w ...

  7. Oracle 聚合实现小计、合计 (GROUP BY ROLLUP)

    1.先创建一个测试表 -- Create table 水果月销售记录表 create table C_FRUITS_SALES_RECORD_T (quarter VARCHAR2(20),--季度m ...

  8. group by rollup

    首先引用ITPUB上的总结: rollup(a,b,c)----------------> 从右到底递减汇总 ====>group by a,b,c   (减0次) UNION ALL = ...

  9. ORACLE中每个分组后加个合计,最后总合计的GROUP BY rollup,和中文排序

    参考代码如下 SELECT LOCAL_NAME ,DEPT_DISTINGUISH_NAME ,SUM(TOTAL_PAY_SUM_R_LDC) TOTAL_PAY_SUM_R_LDC ,SUM(B ...

  10. postgre——case、union、小计总计(GROUP BY ROLLUP)写法

    //将几张不同表结构的数据全部合并在一起,使用了case.union,同时实现小计总计 //小计总计使用的 GROUP BY ROLLUP函数,GROUP BY ROLLUP使用双括号将字段括起来,是 ...

最新文章

  1. 一条命令安装Windows Subsystem for Linux
  2. 前端笔记(7)css属性书写顺序,布局流程,chrome调试工具
  3. 如何实时查看mysql当前连接数
  4. 神奇的 SQL 之擦肩而过 → 真的用到索引了吗
  5. Perl 正则表达式 html,使用正则表达式验证表单中的HTML字段使用perl
  6. View的缩放操作--CGAffineTransformMakeScale:
  7. webview的使用
  8. 2021.09.17 word文档撤销按钮变灰,快捷键失效解决办法
  9. linux鼠标手势软件,在Deepin Linux系统使用Easystroke鼠标手势会更方便工作
  10. nginx参数keepalive_timeout
  11. gavin中文是什么意思_Gavin[加文,盖温]的中文翻译及英文名意思
  12. config配置解析
  13. 轻轻松松背单词软件测试,Englishfield词汇记忆与测试
  14. 智能无感验证实战案例:神州优车
  15. NX二次开发CreateDialog函数在UI.hxx文件和WinUser.h中的冲突
  16. 使用attrib命令修复隐藏的文件夹
  17. MySQL事务的操作
  18. 安卓调用系统相机拍照并返回,实现图片预览
  19. 计算机文化基础简单要学什么,计算机文化基础简单介绍
  20. NGINX源码之:目录导航

热门文章

  1. HashMap原理详解:探测技术(Probing)、数据聚集(Clustering)、寻址方式(Addressing)、墓碑删除(tombstones)等技术的深度剖析
  2. A1339. JZPLCM(顾昱洲)|树状数组|hash表|逆元|分解质因数
  3. GitHub绑定阿里云域名
  4. book mac pro怎么重装系统_MacBook Pro怎么重装系统 MacBook Pro重装系统教程
  5. PDF编辑软件哪个好 如何裁剪PDF文件页面
  6. html中的邮件标签
  7. 超细节!数据分析社招面试指南
  8. 如何获取微信用户openid
  9. 尺度、空间异质性、干扰、景观多样性、景观连接度,对其概念的理解
  10. 杜邦线改成焊线_排线和杜邦线有什么区别