group by rollup 后怎样区分排序

 我来答
晰美酒窝
推荐于2018-05-15
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
ROLLUP:
GROUP BY A, B会对A和B出现的每种可能性进行分组。而GROUP BY ROLLUP(A, B)会对A和B出现的每种可能性分组,A的每种可能性分组,最后计算所有的情况。
例如:
rollup(a,b) 包括:(a,b)、(a)、()
rollup(a,b,c) 包括:(a,b,c)、(a,b)、(a)、()

CUBE:
和ROLLUP类似,GROUP BY CUBE(A, B)会对A和B出现的每种可能性分组,A的每种可能性分组,B的每种可能性分组,最后计算所有的情况。
Oracle为了解决引入ROLLUP和CUBE后,汇总和NULL值无法区分的情况,提供了GROUPING、GROUPING_ID和GROUP_ID三个函数。
例如:
cube(a,b) 包括:(a,b)、(a)、(b)、()
cube(a,b,c) 包括:(a,b,c)、(a,b)、(a,c)、(b,c)、(a)、(b)、(c)、()
========================================================
下面以emp表句例子说明:
SQL>break on deptno skip 1 --为了效果明显,我们加上break
SQL> select deptno,ename,sum(sal)
2 from emp
3 group by rollup(deptno,ename);
DEPTNO ENAME SUM(SAL)
---------- ---------- ----------
10 KING 5000
CLARK 2450
MILLER 1300
8750
20 FORD 3000
ADAMS 1100
JONES 2975
SCOTT 3000
SMITH 800
10875
30 WARD 1250
ALLEN 1600
BLAKE 2850
JAMES 950
MARTIN 1250
TURNER 1500
9400
29025
下面对上述显示加上排序功能

SQL> select t1.deptno,nvl(t1.ename,'小计') as ename,t1.sum_sal
2 from (select deptno,ename,sum(sal) as sum_sal from emp group by rollup(deptno,ename)) t1,
3 (select deptno,sum(sal) as sum_sal from emp group by (deptno)) t2
4 where t1.deptno=t2.deptno
5 order by t2.sum_sal desc,t1.deptno,t1.ename
6 /
DEPTNO ENAME SUM_SAL
---------- ---------- ----------
20 ADAMS 1100
FORD 3000
JONES 2975
SCOTT 3000
SMITH 800
小计 10875
30 ALLEN 1600
BLAKE 2850
JAMES 950
MARTIN 1250
TURNER 1500
WARD 1250
小计 9400
10 CLARK 2450
KING 5000
MILLER 1300
小计 8750

已选择17行。
这里在order by 中加一个 t1.deptno 是避免万一两个deptno的sum(sal)一样

附:清除break输出样式:clear break
同样compute sum of sal on ename的清除:clear compute
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小呀么小锅巴
2015-05-15
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
ORDER和ROLLUP是相斥的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式