为什么&#34; SELECT COUNT(DISTINCT <column>)FROM&#34;返回0?

时间:2015-08-17 02:58:39

标签: sql database

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

5 个答案:

答案 0 :(得分:4)

在两种情况下,

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

如果您没有WHEREJOIN,则NULL的值均为<Columnb>

答案 1 :(得分:0)

要验证列中的所有记录是否具有NULL值,您可以尝试以下查询:

SELECT <columB> FROM <TABLE> WITH (NOLOCK) WHERE <columB> IS NOT NULL

它应该返回0记录。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:-2)

在您的代码之前运行以下查询:

<br>
$db->("SET NAMES UTF8");