oralce分析函数---group by || rollup || cude || grouping || grouping sets
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相关推荐
- mysql group by cube_group by、grouping sets、with rollup、with cube方法
场景 在编写报表的 sql 脚本的时候,可能会遇到多维度组合的情况,例如下面的情况.常规的做法是编写不同维度组合的 sql ,然后再使用 union all 进行全集(当分组维度数量比较多的时候,un ...
- group by rollup 和grouping的使用实例
GROUPING函数可以接受一列,返回0或者1.如果列值为空,那么GROUPING()返回1:如果列值非空,那么返回0.GROUPING只能在使用ROLLUP或CUBE的查询中使用.当需要在返回空值的 ...
- SQLSERVER中的ALL、PERCENT、CUBE关键字、ROLLUP关键字和GROUPING函数
SQLSERVER中的ALL.PERCENT.CUBE关键字.ROLLUP关键字和GROUPING函数 先来创建一个测试表 1 USE [tempdb] 2 GO 3 4 CREATE TABLE # ...
- 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 ...
- group by rollup | cube 学习
1.如果是ROLLUP(A, B, C)的话,首先会对(A.B.C)进行GROUP BY,然后对(A.B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作. ...
- oracle按层级分组,oracle按照指定列分组合计group by rollup()
group by rollup() 按分组合计 select grouping(status),status,owner,object_type,count(*) from dba_objects w ...
- Oracle 聚合实现小计、合计 (GROUP BY ROLLUP)
1.先创建一个测试表 -- Create table 水果月销售记录表 create table C_FRUITS_SALES_RECORD_T (quarter VARCHAR2(20),--季度m ...
- group by rollup
首先引用ITPUB上的总结: rollup(a,b,c)----------------> 从右到底递减汇总 ====>group by a,b,c (减0次) UNION ALL = ...
- ORACLE中每个分组后加个合计,最后总合计的GROUP BY rollup,和中文排序
参考代码如下 SELECT LOCAL_NAME ,DEPT_DISTINGUISH_NAME ,SUM(TOTAL_PAY_SUM_R_LDC) TOTAL_PAY_SUM_R_LDC ,SUM(B ...
- postgre——case、union、小计总计(GROUP BY ROLLUP)写法
//将几张不同表结构的数据全部合并在一起,使用了case.union,同时实现小计总计 //小计总计使用的 GROUP BY ROLLUP函数,GROUP BY ROLLUP使用双括号将字段括起来,是 ...
最新文章
- 一条命令安装Windows Subsystem for Linux
- 前端笔记(7)css属性书写顺序,布局流程,chrome调试工具
- 如何实时查看mysql当前连接数
- 神奇的 SQL 之擦肩而过 → 真的用到索引了吗
- Perl 正则表达式 html,使用正则表达式验证表单中的HTML字段使用perl
- View的缩放操作--CGAffineTransformMakeScale:
- webview的使用
- 2021.09.17 word文档撤销按钮变灰,快捷键失效解决办法
- linux鼠标手势软件,在Deepin Linux系统使用Easystroke鼠标手势会更方便工作
- nginx参数keepalive_timeout
- gavin中文是什么意思_Gavin[加文,盖温]的中文翻译及英文名意思
- config配置解析
- 轻轻松松背单词软件测试,Englishfield词汇记忆与测试
- 智能无感验证实战案例:神州优车
- NX二次开发CreateDialog函数在UI.hxx文件和WinUser.h中的冲突
- 使用attrib命令修复隐藏的文件夹
- MySQL事务的操作
- 安卓调用系统相机拍照并返回,实现图片预览
- 计算机文化基础简单要学什么,计算机文化基础简单介绍
- NGINX源码之:目录导航
热门文章
- HashMap原理详解:探测技术(Probing)、数据聚集(Clustering)、寻址方式(Addressing)、墓碑删除(tombstones)等技术的深度剖析
- A1339. JZPLCM(顾昱洲)|树状数组|hash表|逆元|分解质因数
- GitHub绑定阿里云域名
- book mac pro怎么重装系统_MacBook Pro怎么重装系统 MacBook Pro重装系统教程
- PDF编辑软件哪个好 如何裁剪PDF文件页面
- html中的邮件标签
- 超细节!数据分析社招面试指南
- 如何获取微信用户openid
- 尺度、空间异质性、干扰、景观多样性、景观连接度,对其概念的理解
- 杜邦线改成焊线_排线和杜邦线有什么区别