我说的对吗:
COUNT(expr) WHERE expr IS NOT *
将只计算非空值?威尔 COUNT(*) 总是数到所有行?如果所有列都为空呢?
COUNT(*)
qeeaahzv1#
使用mysql,我发现了一个简单的方法:
SELECT count(ifnull(col,1)) FROM table WHERE col IS NULL;
这种方法行不通:
SELECT count(col) FROM table WHERE col IS NULL;
9o685dep2#
刚刚检查过:
select count(*)
返回1,其中一条记录用空值填充
select count(field)
返回0。我看不到记录中有空值的点。此类记录不得存在。
mv1qrgav3#
count(*) 不适用于非空列,它只是要求计算所有行的方法。大致相当于 count(1) .
count(*)
count(1)
pvcm50d14#
如果你也想计算空值,试试看
SELECT COUNT(IFNULL(col, 1)) FROM table;
ogq8wdun5#
对的。count()是表中的所有行,count(expression)是表达式仅为非null的地方。如果所有列都为null(这表示您没有主键,因此在规范化数据库中不应发生这种情况),count()仍然返回插入的所有行。别那么做。您可以将*符号视为“在表中”而不是“在任何列中”。mysql参考手册中介绍了这一点。
5条答案
按热度按时间qeeaahzv1#
使用mysql,我发现了一个简单的方法:
这种方法行不通:
9o685dep2#
刚刚检查过:
返回1,其中一条记录用空值填充
返回0。
我看不到记录中有空值的点。此类记录不得存在。
mv1qrgav3#
count(*)
不适用于非空列,它只是要求计算所有行的方法。大致相当于count(1)
.pvcm50d14#
如果你也想计算空值,试试看
ogq8wdun5#
对的。count()是表中的所有行,count(expression)是表达式仅为非null的地方。
如果所有列都为null(这表示您没有主键,因此在规范化数据库中不应发生这种情况),count()仍然返回插入的所有行。别那么做。
您可以将*符号视为“在表中”而不是“在任何列中”。
mysql参考手册中介绍了这一点。