我说的对吗?
COUNT(expr) WHERE expr IS NOT *
将只计算非空值?COUNT(*)总是计算所有的行吗?如果所有的列都为空呢?
COUNT(*)
0qx6xfy61#
正确。COUNT()表示表中的所有行,COUNT(Expression)表示表达式仅为非空的行。如果所有的列都是NULL(这表明你没有主键,所以在规范化数据库中不应该发生这种情况),COUNT()still 返回所有插入的行,但不要这样做。您可以将 * 符号视为表示“在表中”而不是“在任何列中”。这在MySQL参考手册中有介绍。
apeeds0o2#
如果还想计算NULL,请尝试
SELECT COUNT(IFNULL(col, 1)) FROM table;
093gszye3#
刚刚检查:
select count(*)
返回1,其中一条记录为NULL
select count(field)
返回0。我没有在记录中看到NULL值的点。这样的记录一定不存在。
t3psigkw4#
count(*)不适用于非空列,它只是请求计算所有行的方法,大致相当于count(1)。
count(*)
count(1)
z4bn682m5#
使用MySQL我发现这个简单的方法:
SELECT count(ifnull(col,1)) FROM table WHERE col IS NULL;
这种方式行不通:
SELECT count(col) FROM table WHERE col IS NULL;
ezykj2lf6#
如果你想只计算空值,你也可以使用COUNT()和IF。示例:
COUNT()
IF
select count(*) as allRows, count(if(nullableField is null, 1, NULL)) as missing from myTable;
你可以改变if条件来计算你真正想要的,所以你可以在一个查询中有多个计数。
ha5z0ras7#
从表格中选择count(*)为“总计”,sum(if(columna为null,1,0))为“nulos”;
7条答案
按热度按时间0qx6xfy61#
正确。COUNT()表示表中的所有行,COUNT(Expression)表示表达式仅为非空的行。
如果所有的列都是NULL(这表明你没有主键,所以在规范化数据库中不应该发生这种情况),COUNT()still 返回所有插入的行,但不要这样做。
您可以将 * 符号视为表示“在表中”而不是“在任何列中”。
这在MySQL参考手册中有介绍。
apeeds0o2#
如果还想计算NULL,请尝试
093gszye3#
刚刚检查:
返回1,其中一条记录为NULL
返回0。
我没有在记录中看到NULL值的点。这样的记录一定不存在。
t3psigkw4#
count(*)
不适用于非空列,它只是请求计算所有行的方法,大致相当于count(1)
。z4bn682m5#
使用MySQL我发现这个简单的方法:
这种方式行不通:
ezykj2lf6#
如果你想只计算空值,你也可以使用
COUNT()
和IF
。示例:
你可以改变if条件来计算你真正想要的,所以你可以在一个查询中有多个计数。
ha5z0ras7#
从表格中选择count(*)为“总计”,sum(if(columna为null,1,0))为“nulos”;