当我使用count时,Mysql返回0

时间:2017-08-06 13:46:11

标签: mysql sql aggregate-functions

我有这张桌子:

通知

+-------+--------+--------+
| id    |category| notify |
+-------+--------+--------+
|     1 |products|     yes|
|     2 |web     |     no |
|     3 |clients |     yes|
|     4 |clients |     yes|
+-------+--------+--------+

我需要这个结果:

Category | Count |
products |      1|
web      |      0|
clients  |      2|

我试过

SELECT count(*), category
FROM Notifications
WHERE notify = "yes"
GROUP BY category

但我得到

Category | Count |
products |      1|
 clients |      2|

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

Notifications中获取所有类别的一种方法是使用条件聚合:

SELECT n.category, sum(n.notify = 'no')
FROM Notifications n
GROUP BY n.category;

如果您有一个单独的类别表,那么您可以使用left join获取所有类别(即使是那些没有通知的类别):

select c.category, count(n.category)
from categories c left join
     notifications n
     on c.category = n.category and n.notify = 'no'
group by c.category;

答案 1 :(得分:0)

SELECT count(*) AS no_category FROM Notifications 
WHERE notify="no" GROUP BY category;

这样计数值将存储在no_category中。使用PHP,你可以

echo $row["no_category"]; 

在MySQL控制台上,查询将生成一个表格

no_category

1

答案 2 :(得分:0)

并且,您还可以使用无处不在的case语句来执行条件聚合。

Select category, 
  Sum(case when Notify = 'Yes' then 1 else 0 end) count, 
FROM Notifications
GROUP BY category