SQL为count()返回0,但使用简单的SELECT

时间:2017-06-22 18:38:51

标签: sql database ms-access

对不起,如果我的问题的措辞不是很清楚。

我在下面运行这个简单的查询

SELECT count(cg)
FROM all_data
WHERE cg is null

结果是0。当我运行此查询时

SELECT cg
FROM all_data
WHERE cg is null

并获得符合条件的一堆记录。很明显很多记录的cg值为null,但它们不会出现在count()查询中。

这有什么理由吗?我做错了吗?

感谢您的帮助

3 个答案:

答案 0 :(得分:5)

聚合(COUNT()SUM()等)忽略NULL值。

使用COUNT(*)计算符合条件的所有行。

SELECT COUNT(*)
  FROM all_data
 WHERE cg IS NULL

进一步阅读 - Count Function (Microsoft Access SQL)

  

Count函数不计算具有Null字段的记录,除非expr是星号(*)通配符。如果使用星号,Count会计算记录总数,包括那些包含Null字段的记录。 Count(*)比Count([Column Name])快得多。

答案 1 :(得分:0)

如果要计算空值的数量,请使用以下查询

SELECT
SUM(CASE WHEN CG IS NULL THEN 1 END) AMOUNT_CG
FROM all_data

不再按照上面朋友的提示

答案 2 :(得分:0)

根据Aggregate Functions上的SQL参考手册部分:

除COUNT(*)和GROUPING之外的所有聚合函数都忽略空值。您可以在聚合函数的参数中使用NVL函数来将值替换为null。 COUNT永远不会返回null,但会返回数字或零。对于所有剩余的聚合函数,如果数据集不包含任何行,或者只包含带有null作为聚合函数参数的行,则该函数返回null。

  

因此,根据以上信息,我们可以得出结论,要解决您的问题,请使用count(*)代替count(cg)

相关问题