group by 字句的扩展+rollup字句+cube字句+grouping()函数

1rollup字句
rollup字句扩展group by字句,为每一个分组返回一条小计记录,并为全部分组返回总计

列如:rollup字句获取每个部门的工资总计
select d.dname,sum(e.sal)
from emp e,dept d
where e.deptno=d.deptno
group by rollup(d.dname)
order by d.dname;
解释:
dname:部门名称

这里写图片描述

与没有使用rollup比较
这里写图片描述

下面是rollup多个列分组求总计
select d.dname,e.job,sum(e.sal)
from emp e,dept d
where e.deptno=d.deptno
group by rollup(d.dname,e.job)

这里写图片描述

2cube字句
cube字句对group by进行扩展,返回cube中所有列组合的小计信息,同时在最后显示总计信息

select d.dname,e.job,sum(e.sal)
from emp e,dept d
where e.deptno=d.deptno
group by cube(d.dname,e.job)
order by d.dname,e.job
这里写图片描述

3grouping()函数

grouping()函数可以接受一列,返回0,或者1,
如果列值为空,那么grouping()函数返回1,否则返回0。grouping()函数只能在使用rollup或者cube的查询中使用

下面的查询使用grouping()函数确定列值是否为空

select grouping(d.dname),d.dname,sum(e.sal)
from emp e,dept d
where e.deptno=d.deptno
group by rollup(d.dname)
order by d.dname
这里写图片描述

上面代码进阶
select
case grouping(d.dname)
when 1 then ‘部门工资合计’
else d.dname
end
as deptName,sum(e.sal)
from emp e,dept d
where e.deptno=d.deptno
group by rollup(d.dname)
order by d.dname;
这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值