MySQL COUNT()和空值

cl25kdpy  于 2023-03-17  发布在  Mysql
关注(0)|答案(7)|浏览(310)

我说的对吗?

COUNT(expr)
WHERE expr IS NOT *

将只计算非空值?
COUNT(*)总是计算所有的行吗?如果所有的列都为空呢?

0qx6xfy6

0qx6xfy61#

正确。COUNT()表示表中的所有行,COUNT(Expression)表示表达式仅为非空的行。
如果所有的列都是NULL(这表明你没有主键,所以在规范化数据库中不应该发生这种情况),COUNT(
still 返回所有插入的行,但不要这样做。
您可以将 * 符号视为表示“在表中”而不是“在任何列中”。
这在MySQL参考手册中有介绍。

apeeds0o

apeeds0o2#

如果还想计算NULL,请尝试

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

093gszye3#

刚刚检查:

select count(*)

返回1,其中一条记录为NULL

select count(field)

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

t3psigkw

t3psigkw4#

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

z4bn682m

z4bn682m5#

使用MySQL我发现这个简单的方法:

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

这种方式行不通:

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

ezykj2lf6#

如果你想计算空值,你也可以使用COUNT()IF
示例:

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

你可以改变if条件来计算你真正想要的,所以你可以在一个查询中有多个计数。

ha5z0ras

ha5z0ras7#

从表格中选择count(*)为“总计”,sum(if(columna为null,1,0))为“nulos”;

相关问题