六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 48|回复: 0

Oracle的GROUP BY语句(支持ROLLUP和CUBE语句)

[复制链接]

升级  67.33%

41

主题

41

主题

41

主题

秀才

Rank: 2

积分
151
 楼主| 发表于 2013-1-27 04:44:02 | 显示全部楼层 |阅读模式
Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。

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

如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。 grouping和grouping_id()可以美化效果。

给一个完整的SQL,我相信根据下面的SQL应该可以学习了。

select decode(grouping_id(t2.deptno,ROWNUM),3,'总计',1,'小计',t2.deptno) deptno,
decode(GROUPING(ROWNUM), 1, NULL, MAX(t2.dname)) dname,
decode(GROUPING(ROWNUM), 1, NULL, MAX(EMPNO)) EMPNO,
decode(GROUPING(ROWNUM), 1, NULL, MAX(ENAME)) ENAME,
decode(GROUPING(ROWNUM), 1, NULL, MAX(job)) job,
SUM(t1.sal)
FROM   scott.emp t1, scott.dept t2
WHERE  t1.deptno = t2.deptno
GROUP  BY ROLLUP(t2.deptno, ROWNUM)
 
 
 
select job,deptno,sum(sal) total_sal

from emp group by rollup(job,deptno);
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表