MySQL IFNULL 不返回默认值

标签 mysql count ifnull

id    category    active
------------------------
1     1           1
2     3           0
3     3           1
4     3           1
5     1           0

我想选择每个类别的总计数每个类别中的活跃计数

因为没有category=2,所以我用了IFNULL,但是没有返回0

SELECT
    IFNULL(COUNT(id), 0) AS total,
    SUM(CASE WHEN active = 1 THEN 1 ELSE 0 END) AS active
FROM
    table
WHERE
    category IN (1,2,3)
GROUP BY
    category

结果返回了 2 个数组,而不是预期的 3 个

// result from category=1
Array
(
    [total] => 2
    [active] => 1
)
//  result from category=3
Array
(
    [total] => 3
    [active] => 2
)

如何将 category=2 放入结果中

//  result from category=2
Array
(
    [total] => 0
    [active] => 0
)

最佳答案

您的查询返回了正确的结果,只是不是您期望的结果,COUNT 是一个分组子句,只对现有值进行分组,它不会返回 = 到 category=2,因为该类别不存在。

关于MySQL IFNULL 不返回默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13394676/

相关文章:

c# - Nhibernate Linq - 选择评分最高的项目

mysql - 使用 NULL 字段连接不存在的行的 SQL 查询

mysql - 在MySQL中,哪个更高效 : IFNULL or NULLIF?

MySql 多个 where 条件 - 只匹配第一个正确的条件

mysql - Hibernate、c3p0 和 Mysql、spring

mysql - 是否可以将两个 MySQL 数据库合并为一个?

mysql - 为什么此查询和条件返回行

mysql - SQL 中的类别

mysql选择行并计算每个连接的不同行

r - 计算 value 和 value - x 之间的值的数量,按变量