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关于Group by合计、小计的使用

方法:group by rollup(col1,col2) group by cube(col1,col2) 具体例子: select G_GOODS_OUT.DEPTID, sum(decod...

oracle group by rollup实现小计、合计

oracle group by rollup实现小计、合计

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Oracle的rollup、cube、grouping sets函数

Oracle的rollup、cube、grouping sets函数

Oracle中grouping和grouping_id使用

1、grouping使用 使用grouping可以判断该行是数据库中本来的行,还是有统计产生的行 SQL> select grouping(grade),grade,sum(num) from a g...

Oracle group by高级用法对比效果(ROLLUP、GROUPING SETS、CUBE)

Oracle group by高级用法对比效果(ROLLUP、GROUPING SETS、CUBE),今天主要跟大家演示一下,在同一组数据的情况下,每个SQL的执行结果。      一:普通的grou...

Oracle 结合rollup生成报表

oracle rollup实战

新手上路之Hibernate:第一个Hibernate例子

一、Hibernate概述 (一)什么是Hibernate? Hibernate核心内容是ORM(关系对象模型)。可以将对象自动的生成数据库中的信息,使得开发更加的面向对象。这样作为程序员就可以使用面...

Oracle Group By 用法之 —— Rollup

Oracle数据库中的rollup配合group by命令使用,可以提供信息汇总功能(与"小计"相似) 示例如下: SQL> select job,deptno,sal from emp; ...

oracle快速理解rollup

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

Oracle-rollup()函数

参考学习了: http://blog.itpub.net/519536/viewspace-610995 http://blog.csdn.net/huang_xw/article/details...
  • mxmxz
  • mxmxz
  • 2016-06-24 11:17
  • 1181
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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