SQL count case else else 0 vs null

时间:2017-01-27 13:59:45

标签: mysql sql count

我真的需要对此进行探索。假设您有下表:

    Columns:
id  int(11) AI PK
user_id int(11)
is_complete int(11)

在上表中,is_complete可以是10

现在您希望进行一些计数,以便创建以下SQL语句:

COUNT(CASE
    WHEN is_complete = 0 THEN 1
    ELSE 0
END) AS not_complete

说这个结果是:

enter image description here

(这是不正确的)

现在您将完全相同的语句更改为:

COUNT(CASE
    WHEN is_complete = 0 THEN 1
    ELSE null
END) AS not_complete

注意我已将0更改为null

你得到以下结果:

enter image description here

经过一些激烈的测试后,你会发现1.不正确的陈述实际上无论如何都是重要的。

我的问题是为什么?

2 个答案:

答案 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