我有这张桌子:
通知
+-------+--------+--------+
| 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|
感谢您的帮助。
答案 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控制台上,查询将生成一个表格
1
答案 2 :(得分:0)
并且,您还可以使用无处不在的case
语句来执行条件聚合。
Select category,
Sum(case when Notify = 'Yes' then 1 else 0 end) count,
FROM Notifications
GROUP BY category