加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

sum(nvl(a,b))与nvl(sum(a),b)区别

(2012-11-28 20:26:30)
标签:

sum

nvl

it

分类: UI

在正常情况下,所有行的数据不全为空时:

Sql代码
  1. select sum(nvl(1,1)) from dual ;   
  2. select nvl(sum(1),1) from dual  
select sum(nvl(1,1)) from dual ;
select nvl(sum(1),1) from dual ;

 结果是一样的。

 

在所有行数据都为空时:

Sql代码
  1. select sum(nvl(null,1)) from dual ;   
  2. select nvl(sum(null),1) from dual  
select sum(nvl(null,1)) from dual ;
select nvl(sum(null),1) from dual ;

 结果也还是一样。

 

当查不到数据时:

Sql代码
  1. select sum(nvl(1,1)) from dual where 1<>1;   
  2. select nvl(sum(1),1) from dual where 1<>1;   
  3. select sum(nvl(null,1)) from dual where 1<>1;   
  4. select nvl(sum(null),1) from dual where 1<>1;  
select sum(nvl(1,1)) from dual where 1<>1;
select nvl(sum(1),1) from dual where 1<>1;
select sum(nvl(null,1)) from dual where 1<>1;
select nvl(sum(null),1) from dual where 1<>1;

 可以发现sum在里面和外面结果是不一样的。sum在外面,结果为空,sum在里面结果为1

这是因为sum和nvl的异常处理不一样导致的。

当处理数据时,如果碰到没有数据(注意没有数据不是null)时,sum返回"空",而nvl返回"没有数据"。

所以,当sum在外面时,nvl先返回"没有数据",sum再对"没有数据"做处理,返回结果为"空"。

当sum在里面时,sum先对"没有数据"做处理,返回结果为"空",nvl再对nvl处理,返回结果为1。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有