繁体   English   中英

为什么“选择COUNT(DISTINCT <Column> )FROM <Table> “回归0?

[英]Why “SELECT COUNT(DISTINCT <Column>) FROM <Table>” return 0?

我已经为一个大型表格中的所有列运行了上面的查询(十亿行),一切都很好,除了一对正在返回0的情况。这怎么可能?

COUNT(DISTINCT)在两种情况下可以返回零。 第一个是列/表达式的所有值都计算为NULL 第二个是WHERE子句(或JOIN )过滤掉所有行。

如果没有WHEREJOIN ,则<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM