我已经为一个大型表格中的所有列运行了上面的查询(十亿行),一切都很好,除了一对正在返回0的情况。这怎么可能?
答案 0 :(得分:4)
COUNT(DISTINCT)
可以返回零。第一个是列/表达式的所有值都计算为NULL
。第二个是WHERE
子句(或JOIN
)过滤掉所有行。
如果您没有WHERE
或JOIN
,则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)
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");