[英]Why “SELECT COUNT(DISTINCT <Column>) FROM <Table>” return 0?
我已经为一个大型表格中的所有列运行了上面的查询(十亿行),一切都很好,除了一对正在返回0的情况。这怎么可能?
COUNT(DISTINCT)
在两种情况下可以返回零。 第一个是列/表达式的所有值都计算为NULL
。 第二个是WHERE
子句(或JOIN
)过滤掉所有行。
如果没有WHERE
或JOIN
,则<Columnb>
的值都为NULL
。
要验证列中的所有记录是否具有NULL值,您可以尝试以下查询:
SELECT <columB> FROM <TABLE> WITH (NOLOCK) WHERE <columB> IS NOT NULL
它应该返回0记录。
count(column_name)
仅计算count(column_name)
NOT NULL的行。
所以
select count(column_name)
from some_table;
相当于
select count(*)
from some_table
where column_name is not null;
count()
内部的独特内容实际上与此无关。 但count(distinct column_name)
相当于:
select count(*)
from (
select distinct column_name
from some_table
where column_name is not null
) t
innodb上的COUNT(*)有时会返回0.尝试关闭index_merge_intersection:
SET SESSION optimizer_switch="index_merge_intersection=off";
这是一个Mysql 5.6 bugreport https://bugs.mysql.com/bug.php?id=81031
在代码之前运行以下查询:
<br>
$db->("SET NAMES UTF8");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.