这是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?
从表中选择特定字段和*之间的区别是什么?
答案 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;