count函数在SQL中没有按预期工作

时间:2015-07-08 08:05:55

标签: sql postgresql

我有一个表a,其中sdate列为TIMESTAMP

我想计算sdate为空的行数。

我在做什么

SELECT sdate
FROM a
WHERE sdate IS NULL

我获得13行。

所以我之后做的是:

SELECT count(sdate) 
FROM a
WHERE sdate IS NULL

我希望得到13,但我得到0。 我不明白为什么。

当我将其更改为:

SELECT count(*) 
FROM a
WHERE sdate IS NULL

我得到13正确的结果。

有人可以解释为什么SELECT count(sdate)接近返回错误结果吗?

3 个答案:

答案 0 :(得分:2)

使用以下查询计算时得到0结果:

SELECT count(sdate)
FROM a
WHERE sdate IS NULL

因为COUNT()没有考虑NULL值。 COUNT()仅考虑非NULL值。

与使用时相反:

SELECT count(*) 
FROM a
WHERE sdate IS NULL

计算整个表格中的行数(因为您使用的是*)。

以下是SQLFiddleCOUNT(*)COUNT(1)都会返回结果。

答案 1 :(得分:0)

COUNT aggregate采用表达式,它只计算 NULL的行。例如;

COUNT(*) - 或COUNT(1),例如。 - 计算每一行。

COUNT(col)仅计算col NULL的行。

COUNT(NULL) - 始终为零。

在这种情况下,由于所选行(全部)的sdate列具有空值,因此COUNT(sdate)中的行计数,这导致正确数为0.

答案 2 :(得分:0)

select count(null);
 count
-------
     0
(1 row)

Time: 1.772 ms

为什么会感到惊讶?...

from:

  

空值表示未知值,并且未知   两个未知值是否相等。)此行为符合   SQL标准。

count() reference:

  

count(表达式)任何bigint数量的输入行的值   表达式不为空

相关问题