加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-12 16:04:03 所属栏目:百科 来源:网络整理
导读:rollup配合goup by使用,照小组进行分组,同时求总计。可以提供信息汇总功能(类似于"小计") ROLLUP在数据统计和报表生成过程中带来极大的便利 rollup操作---按GROUP BY ROLLUP()本身是分组统计求和的意思 如果是ROLLUP(A,B,C)的话, 首先会对(A、B、C)进行

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

PRESIDENT10 5000.00

SALESMAN30 1250.00
SALESMAN 30 1500.00
SALESMAN 301250.00
SALESMAN 301600.00

2、使用group by 分组
select job,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
ANALYST6000

MANAGER 10 2450
MANAGER 20 2975
MANAGER 30 2850
MANAGER 8275

SALESMAN 30 5600
SALESMAN 5600

PRESIDENT 105000
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),'所有月份',month),sum(money)
From SaleOrder
Group by RollUp(area,month);

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

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

使用:grouping_id

select job,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读