关于rollup

[复制链接]
查看11 | 回复8 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
请高手解释以下哪个sql更高效

A.
select count(*) as num ,
case when groupping(deptno)=1 then '合计' else
deptno end as dd
from scott.deptno
group byrollup(deptno)
B.
select count(*) as num ,deptno from scott.emp group by deptno
union all
select sum(num),'合计' from
(
select count(*) as num ,deptno from scott.emp group by deptno)
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
应该是上边的快一点,但我不清楚oracle的CBO优化策略会不会把B变成别的来执行!
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
[PHP]
你的SQL语句有语法错误!
改改, 如下:
SQL> select nvl(to_char(deptno), 'Total'), count(*) from emp
2group by rollup(deptno);
NVL(TO_CHAR(DEPTNO),'TOTAL')
COUNT(*)
---------------------------------------- ----------
10
3
20
5
30
6
Total
14
SQL>
[/PHP]
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
老兄我的sql没有语法错误,只是表名字写错了应为
scott.emp
还有grouping 我写成了 groupping
这是笔误
但不是语法错误
你用nvl只是代替了空,而我要的就是空
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
谢谢诸位,应该是第一个快一些
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
最初由 freepigfly 发布
[B]老兄我的sql没有语法错误,只是表名字写错了应为
scott.emp
还有grouping 我写成了 groupping
这是笔误
但不是语法错误
你用nvl只是代替了空,而我要的就是空 [/B]

明明自己要合计,还说要空!
第一个快!
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
我没别的意思,只是说不是语法错误,谢谢你的回复
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
一般情况下,第一个快了.
不然oracle也就不需要这种语法的存在了.
不过话说回来, oracle 搞死人, 很多东西在特定的环境下都变样了.
这也是oracle神奇的地方.
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
就是,尤其是sql的执行计划变动很大!
稍微改动一下就变了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行