`
liulanghan110
  • 浏览: 1064283 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

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

阅读更多

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

select sum(nvl(1,1)) from dual ;
select nvl(sum(1),1) from dual ;

 结果是一样的。

 

在所有行数据都为空时:

select sum(nvl(null,1)) from dual ;
select nvl(sum(null),1) from dual ;

 结果也还是一样。

 

当查不到数据时:

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。

 

分享到:
评论

相关推荐

    oracle中查看表空间与对应物理文件,用户,表,使用情况

    round((sum(nvl(b.bytes, 0)) - sum(nvl(a.bytes, 0))) / 1024 / 1024, 2) 已经使用M, round(sum(nvl(a.bytes, 0)) / 1024 / 1024, 2) 剩余M, round(sum(c.bytes) / 1021 / 1024, 2) 该用户使用M from ...

    Oracle维护常用SQL语句

    sum(nvl(a.bytes,0)) 剩余空间,sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比 from dba_free_space a,dba_data_files b where a.file_id=b.file_id group by b.tablespace_name,b.file_id,b.bytes order by b....

    UNION ALL 的使用方法

    NVL(SUM(A.AMOUNT),0) INTO W_ATS_RE_BOOKED_AMT FROM XXXXXXXXX A, ( SELECT B.TRD_NO FROM XXXXXXXXX B WHERE B.CLIENT_CD = W_IN_CLIENT_CD UNION ALL SELECT C.TRD_NO FROM XXXXXXXXX C WHERE...

    oracle查询表空间大小

    round(((a.BYTES-nvl(b.BYTES, 0))/a.BYTES)*100,2) "Pct Used", round((1-((a.BYTES-nvl(b.BYTES,0))/a.BYTES))*100,2) "Pct Free" from (select TABLESPACE_NAME, sum(BYTES) BYTES from sys.dba_data_files ...

    Oracle 表空间查询与操作方法

    查询oracle表空间的使用情况 select b.file_id 文件ID, b.tablespace_name 表空间, b.file_name 物理文件名, b.bytes 总字节数, (b.bytes-sum(nvl(a.bytes,0))) 已使用, sum(nvl(a.bytes,0)) 剩余, sum(nvl(a....

    Oracle数据库的空间管理技巧

    正在看的ORACLE教程是:Oracle数据库的空间管理技巧。 在Oracle数据库中,DBA可以通过观测一定的表或视图来了解当前空间的使用...2 a.bytes "Bytes",a.bytes-sum(nvl(b.bytes,0)) "Used", 3 sum(nvl(b.bytes,0)) "Fre

    服务器容量管理程序.doc

    "知 " " " " "利用率 from (select " " " " " " "tablespace_name a1, " " " " " " "sum(nvl(bytes,0)) a2" " " " " " "from dba_free_space " " " " " " "group by " " " " " " "tablespace_name) " " " " " " "a,...

    SQL培训第一期

    from student_A A full outer join student_B B on A.Uuid = B.Uuid; 1.6.4.3 结果 1.6.4.4 全外连接不支持(+)写法 1.6.5 (+) + 表示补充,即哪个表有加号,这个表就是匹配表。 1.7 运算符 1.7.1 比较 =、&gt;,&lt;,...

    Oracle中查看表空间使用率的SQL脚本分享

     SPACE || ‘M’ “SUM_SPACE(M)”,  BLOCKS “SUM_BLOCKS”,  SPACE – NVL (FREE_SPACE, 0) || ‘M’ “USED_SPACE(M)”,  ROUND ( (1 – NVL (FREE_SPACE, 0) / SPACE) * 100, 2) || ‘%’  “USED_

    oracle-10G函数大全.chm

    1,数值型函数(abs()、sign()、ceil()、floor()、power()、exp()、round()...); 2,字符型函数(lower()、upper()、lpad()、rpad()、substr()、replace()...);...7,其它函数(decode()、nvl()、nvl2()、least()...);

    oracle数据库经典题目

    A.DBWR B.LGWR C. SMON D.PMON 3. 如果要查询数据库中所有表的信息,应当使用下列哪种数据字典视图?( A ) A. DBA视图 B. ALL视图 C. USER视图 D. 动态性能视图 4. 下列哪一项是Oracle数据库中最小的存储分配...

    oracle学习笔记

    基本涵盖了oracle的各个方面: oracle day3 笔记 外连接: ... 求所有人提成的平均值:select sum(commission_pct)/count(*) from s_emp; select avg(nvl(commission_pct,0)) from s_emp;

    C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 易懂

    1 a,b,c 2 a,f,x 3 e,m create or replace procedure proc_alltypes is begin for c in (select id, name, parentid from producttype) loop dbms_output.put_line(c.id); end loop; end proc_alltypes; begin...

    orcale常用命令

    (B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE" FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_...

    2009达内SQL学习笔记

    like 'M%':M开头的 like '_a%':第二个字符是a的 like '%a%'所有含a的 (“_”表示一个任意字符;“%”表示任意多个任意字符。) 单引号里面的内容,大小写敏感。单引号用来限定字符串, 如果将值与串类型的列...

    oracle学习笔记(二)

    一、多行函数又称组合函数(Group Functions)、聚合函数 1、 Types of Group Functions avg、count、max、min、stddev、sum、variance avg 求平均数 select avg(nvl(列1,0)) from 表1 count求行数 在where条件中不...

    精髓Oralcle讲课笔记

    ------------------------/组函数(共5个):将多个条件组合到一起最后只产生一个数据------min() max() avg() sum() count()----------------------------/ 51、select count(*) from emp; --求出表中一共有多少条...

    Oracle练习笔试大全

    /////////////////////////组函数(共5个):将多个条件组合到一起最后只产生一个数据//////min() max() avg() sum() count()///////////////////////////// 51、select count(*) from emp; //求出表中一共有多少条...

    最全的oracle常用命令大全.txt

    (B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE" FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_...

    Oracle_Database_11g完全参考手册.part3/3

    9.4.3 AVG、COUNT、MAX、MIM和SUM 9.4.4 组值函数和单值函数的组合 9.4.5 STDDEV和、VARIANCE 9.4.6 组函数中的DISTINCT 9.5 列表函数 9.6 使用MAX或MIN函数查找行 9.7 优先级和圆括号的应用 9.8 小结 第10章 日期...

Global site tag (gtag.js) - Google Analytics