如果你不想要出现空值,SUM(NVL(no_of_calls,0))是正确的。

解决方案 »

  1.   

    都不会返回NUll
    其实如果列中所有值都为NUll,则sum(no_of_calls)会返回NUll
    但nvl又使它转换为0了它们都是先判断是否为null,再进行运算的。
      

  2.   

    SUM(NVL(no_of_calls,0))这句有可能返NULL
      

  3.   

    to beckhambobo(beckham)为什么?能解释吗?谢谢!
      

  4.   

    当表中没有记录时,SUM(NVL(no_of_calls,0))这句有可能返NULL
      

  5.   

    SQL> select sum(nvl('',0)) from dual;SUM(NVL('',0))
    --------------
                 0SQL> select nvl(sum(null),0) from dual;NVL(SUM(NULL),0)
    ----------------
                   0
      

  6.   

    实际上我看好像也是SUM(NVL(no_of_calls,0))这句有可能返NULL但是我不能确定,也不知道为什么。谁能够解释
      

  7.   

    beckhambobo你的思考只是在no_of_calls = ‘’上
    如果所选的表中根本没记录呢?
    select sum(nvl(no_of_calls ,0)) from tablename;
    返回的就是null
      

  8.   

    SQL> create table temp ( a number(10) );表已创建。SQL> select sum(nvl(a,0)) from temp;SUM(NVL(A,0))
    -------------
      

  9.   

    nvl(a,b)函数的作用是当字段a的值为空(NULL)时,取b,但前提是字段a的有值,即使是NULL,当表中无记录时,nvl函数返回的是NULL,所以SUM(nvl(a,0))实际上是对NULL进行求和,所以返回为NULL.
      

  10.   

    to beckhambobo(beckham):
     you -- is  ?
     you -- are ! -)))
      

  11.   

    假设表里面有记录,但是有某一个字段的记录有些为NULL,而有些记录又不为NULL的话,情况是怎么样?
      

  12.   

    我试了:
    NVL(SUM(no_of_calls),0)
    SUM(NVL(no_of_calls,0))
    sum(no_of_calls)
    当表中有记录,且no_of_calls有null值时,三者结果一样,都对当表中没有记录时,三者都为null
      

  13.   

    笔误:更正
    当表中没有记录时,
    NVL(SUM(no_of_calls),0)值为0
    其他为null
      

  14.   

    NVL(SUM(no_of_calls),0)值为0
      

  15.   

    本人认为NVL(SUM(no_of_calls),0)这样的写法更合理!