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/