oracle的rollup操作---按照小组进行分组,同时求总计

转载 2016年08月28日 15:58:50

rollup配合goup by使用,照小组进行分组,同时求总计。可以提供信息汇总功能(类似于"小计")
ROLLUP在数据统计和报表生成过程中带来极大的便利

 

rollup操作---按GROUP BY ROLLUP()本身是分组统计求和的意思

 

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

 

 


下面是一个简单例子:
1、不使用group by 分组

 查询各部门各职位的工资情况
select   job,deptno,sal  

from   emp

order by job, deptno

 

JOB           DEPTNO            SAL
ANALYST      20              3000.00
ANALYST      20              3000.00    --->group by 之后 ANALYST    20      6000.00

CLERK         10               1300.00
CLERK         20                800.00
CLERK         20               1100.00
CLERK         30               950.00

MANAGER    10               2450.00
MANAGER    20               2975.00
MANAGER    30               2850.00

PRESIDENT 10               5000.00

SALESMAN  30               1250.00
SALESMAN  30               1500.00
SALESMAN  30               1250.00
SALESMAN  30               1600.00

 

2、使用group by 分组
select job,deptno,sum(sal) total_sal   
from emp   
group by rollup(job,deptno); 
查询员工表,对各个部门的各个职位进行分组,对工资进行小计和总计

JOB         DEPTNO      TOTAL_SAL
CLERK         10               1300
CLERK         20               1900
CLERK         30                 950
CLERK                             4150

ANALYST      20               6000
ANALYST                        6000

MANAGER     10              2450
MANAGER     20              2975
MANAGER     30              2850
MANAGER                       8275

SALESMAN    30             5600
SALESMAN                     5600 

PRESIDENT   10             5000 
PRESIDENT                    5000          -->PRESIDENT职位总计

                                    29025         --->总计

 

如果year不想累加,可以写成
Select year,month,area,sum(total_sale) from SaleOrder group by year, rollup(month,area)
        
Grouping用法

 

Grouping是用来判断当前Column是否是一个合计列,1为yes
Select Decode(Grouping(area),1,'所有地区',area) area, 
       Decode(Grouping(month),1,'所有月份',month), sum(money) 
From   SaleOrder 
Group by RollUp(area,month);

 

--如果是一个合计列,则用Decode把它转为"所有月份" 、'所有地区'

 

 

rollup 如何去掉最后一行的总统计

使用:grouping_id

select   job,deptno,sum(sal)   total_sal   from   emp   group   by   rollup(job,deptno) 
having grouping_id(job,deptno)<=1

 

查询的结果就会把最后一行的总计给去掉

 

grouping_id中括号里面的字段和rollup括号里面的字段一致就行
grouping_id是肿么来的?它是oracle的函数,针对rollup和cube的
grouping_id的数字是怎么确定的?
向量值,可以认为是二进值的数,例:grouping_id(a,b,c),如果列a为空就是0 非空为1,列b和列c也一样
结果会得到一个三位数,用二进制转换成十进制就是了,例:a,b,c全是非空,说明这行数据是一个总计,那么就是111
即7,三列就是7,如果是两列自然是11就是3了。
因为Grouping是用来判断当前Column是否是一个合计列,如果是一个合计列,则相应的列会是一个空值

 


转载地址:http://wjlvivid.iteye.com/blog/1696436

 

Oracle的rollup、cube、grouping sets函数

Oracle的rollup、cube、grouping sets函数
  • huang_xw
  • huang_xw
  • 2011年05月07日 20:54
  • 16166

oracle快速理解rollup

rollup使用得当会省掉许多代码量,尤其在一些需要小计、合计的场合,下面通过简单的例子可以快速理解rollup的用法 create table t1(id number(10),name va...
  • wm5920
  • wm5920
  • 2013年11月08日 19:59
  • 1193

Oracle-rollup()函数

参考学习了: http://blog.itpub.net/519536/viewspace-610995 http://blog.csdn.net/huang_xw/article/details...
  • mxmxz
  • mxmxz
  • 2016年06月24日 11:17
  • 2037

oracle group by rollup实现小计、合计

oracle group by rollup实现小计、合计
  • angeiqiang
  • angeiqiang
  • 2015年12月18日 16:54
  • 7293

DB2分组函数ROLLUP和CUBE的使用

DB2的GROUP BY语句除了最基本的语法之外,还支持ROLLUP和CUBE语句。ROLLUP和CUBE在数据统计和报表生成过程中带来极大的便利,而且效率比起来GROUP+UNION组合方式效率高很...
  • guotianlaile
  • guotianlaile
  • 2016年05月13日 18:22
  • 1480

Oracle按日期分组统计数据

昨天项目突然改了个需求,要求折线图的数据显示,必须按照月三天,季度九天来分组统计数据,网上搜索了一堆,差点没找着相关的!还好找到了类似的,现整理下提供给有需要的大家参考参考! (本人是在Oracle数...
  • ClamLaw520
  • ClamLaw520
  • 2016年12月20日 11:18
  • 1650

Oracle 分组统计,按照天、月份周和自然周、月、季度和年

Oracle 分组统计,按照天、月份周和自然周、月、季度和年
  • JavaAlpha
  • JavaAlpha
  • 2016年08月22日 15:33
  • 7126

OLAP 支持---ROLLUP和CUBE语句 group by 的增强版本语句!可进行分层分组模式外 (小计与总计)

OLAP 支持 联机分析处理(On-Line Analytical Processing,简称 OLAP)具有在一条 SQL 语句中执行复杂数据分析的功能,从而通过减少对数据库的查...
  • mfkpie
  • mfkpie
  • 2015年07月12日 22:59
  • 1191

oracle 高级分组 ROLLUP 和 CUBE 区别

用SCOTT/TIGER登录。 查询表EMP: 都不用: SELECT JOB, DEPTNO, SUM(SAL) FROM EMP GROUP BY JOB, DEPTNO; 结果: ...
  • feier7501
  • feier7501
  • 2014年03月19日 22:38
  • 606

Oracle分组函数之ROLLUP魅力

本文通过演示给出Oracle ROLLUP分组函数的用法,体验一下Oracle在统计查询领域中的函数魅力。ROLLUP分组函数可以理解为Group By分组函数封装后的精简用法,这里同时给出ROL...
  • guogrowth
  • guogrowth
  • 2013年07月03日 16:16
  • 369
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle的rollup操作---按照小组进行分组,同时求总计
举报原因:
原因补充:

(最多只允许输入30个字)