我真的需要对此进行探索。假设您有下表:
Columns:
id int(11) AI PK
user_id int(11)
is_complete int(11)
在上表中,is_complete
可以是1
或0
现在您希望进行一些计数,以便创建以下SQL
语句:
COUNT(CASE
WHEN is_complete = 0 THEN 1
ELSE 0
END) AS not_complete
说这个结果是:
(这是不正确的)
现在您将完全相同的语句更改为:
COUNT(CASE
WHEN is_complete = 0 THEN 1
ELSE null
END) AS not_complete
注意我已将0
更改为null
你得到以下结果:
经过一些激烈的测试后,你会发现1.不正确的陈述实际上无论如何都是重要的。
我的问题是为什么?
答案 0 :(得分:1)
计数忽略空值,但不忽略任何其他值。 我想你在考虑总和:
COUNT(CASE
WHEN is_complete = 0 THEN 1
ELSE null
END) AS not_complete
就像
SUM(CASE
WHEN is_complete = 0 THEN 1
ELSE 0
END) AS not_complete
答案 1 :(得分:1)
细微之处是因为COUNT语句指的是存在值。 NULL导致该行从COUNT中消除;第一个版本永远不会返回NULL,因此包含所有行。结果,计数不同。
您可以通过以下方式执行表格中所有值的摘要:
select is_complete,count(*)
from tablename
group by is_complete