对不起,如果我的问题的措辞不是很清楚。
我在下面运行这个简单的查询
SELECT count(cg)
FROM all_data
WHERE cg is null
结果是0。当我运行此查询时
SELECT cg
FROM all_data
WHERE cg is null
并获得符合条件的一堆记录。很明显很多记录的cg
值为null,但它们不会出现在count()
查询中。
这有什么理由吗?我做错了吗?
感谢您的帮助
答案 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)
。