MySQL COUNT()和nulls

时间:2009-08-30 15:03:08

标签: mysql

我说的是正确的:

COUNT(expr)
WHERE expr IS NOT *  
  

只计算非空值吗?

COUNT(*)总是会计算所有行吗?如果所有列都为空,该怎么办?

6 个答案:

答案 0 :(得分:22)

正确。 COUNT(*)是表中的所有行,COUNT(表达式)是表达式仅为非空的位置。

如果所有列都为NULL(表示您没有主键,那么这不应该发生在规范化数据库中)COUNT(*)仍然将返回插入的所有行。只是不要这样做。

您可以将*符号视为“在表格中”而不是“在任何列中”。

MySQL Reference Manual

中介绍了这一点

答案 1 :(得分:13)

如果你想计算NULL,试试

SELECT COUNT(IFNULL(col, 1)) FROM table;

答案 2 :(得分:5)

刚检查过:

选择计数(*)

返回1,其中一条记录填充NULL

选择计数(字段)

返回0.

我没有在NULL值中看到记录中的点。这样的记录一定不存在。

答案 3 :(得分:2)

count(*)不适用于非空列,它只是要求计算所有行的方法。大致相当于count(1)

答案 4 :(得分:0)

使用MySQL,我发现了这种简单方法:

SELECT count(ifnull(col,1)) FROM table WHERE col IS NULL;

这种方式行不通:

SELECT count(col) FROM table WHERE col IS NULL;

答案 5 :(得分:0)

如果您想计算空值,您还可以将 COUNT()IF 结合使用。

示例:

select count(*) as allRows, count(if(nullableField is null, 1, NULL)) as missing from myTable;

您可以更改 if 条件以计算您实际想要的内容。因此,您可以在一个查询中获得多个计数。