Oracle SQL Developer - 计数功能

时间:2014-03-02 14:27:42

标签: sql oracle

output

这是select * from table1的输出,我对count函数有疑问...我想要计算NULL,为了做到这一点,正确的选择是这样做:

从table1中选择count(*),其中fecha_devolucion为null - >这给了我正确的答案,如果我这样做,那么:

select count(fecha_devolucion)
  from table1
  where fecha_devolucion is null --> this returns 0, why? Isn't the same syntax? 

从表中选择特定字段和*之间的区别是什么?

3 个答案:

答案 0 :(得分:4)

从文档(http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions032.htm):

  

如果指定expr,则COUNT返回expr所在的行数   不是空的。 ...

     

如果指定星号(*),则此函数返回所有行...

换句话说,COUNT(fecha_devolucion)计算该列的非NULL值。无论值如何,COUNT(*)都会计算总行数。

答案 1 :(得分:0)

让我们比较两个查询:

select count(*)
from table1
where fecha_devolucion is null;

select count(fecha_devolucion)
from table1
where fecha_devolucion is null;

我认为你误解了count()函数。此函数计算其参数列表中非NULL值的数量。使用常量或*,它会计算所有行。

因此,第一个计算所有匹配的行。第二个计算fecha_devolucion的所有非NULL值。但由于where子句,没有这样的值。

顺便说一下,你也可以这样做:

select sum(case fecha_devolucion is null then 1 else 0 end) as Nullfecha_devolucion
from table1;

答案 2 :(得分:0)

这是获得计数的另一种方式:

SELECT SUM(NVL(fecha_devolucion,1)) FROM table1 WHERE fecha_devolucion IS NULL;