我说的是正确的:
COUNT(expr)
WHERE expr IS NOT *
只计算非空值吗?
COUNT(*)
总是会计算所有行吗?如果所有列都为空,该怎么办?
答案 0 :(得分:22)
正确。 COUNT(*)是表中的所有行,COUNT(表达式)是表达式仅为非空的位置。
如果所有列都为NULL(表示您没有主键,那么这不应该发生在规范化数据库中)COUNT(*)仍然将返回插入的所有行。只是不要这样做。
您可以将*符号视为“在表格中”而不是“在任何列中”。
中介绍了这一点答案 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 条件以计算您实际想要的内容。因此,您可以在一个查询中获得多个计数。