MySQL计数和IFNULL
我有这样的桌子: 我想数一数每个类别有多少种产品MySQL计数和IFNULL,mysql,sql,count,left-join,Mysql,Sql,Count,Left Join,我有这样的桌子: 我想数一数每个类别有多少种产品 SELECT `category_id`, `category_name`, IFNULL(count(*),0) cat_stat FROM `product_to_categories` NATURAL JOIN `categories` GROUP BY `category_id` 除了IFNULL部分外,它几乎正常工作。 我收到: +-------------+---------------+----------
SELECT `category_id`, `category_name`, IFNULL(count(*),0) cat_stat
FROM
`product_to_categories`
NATURAL JOIN
`categories`
GROUP BY `category_id`
除了IFNULL部分外,它几乎正常工作。
我收到:
+-------------+---------------+----------+
| category_id | category_name | cat_stat |
+-------------+---------------+----------+
| 1 | category1 | 5 |
+-------------+---------------+----------+
| 2 | category2 | 5 |
+-------------+---------------+----------+
| 3 | category3 | 6 |
+-------------+---------------+----------+
| 5 | category5 | 4 |
+-------------+---------------+----------+
但我也希望得到空结果:
+-------------+---------------+----------+
| category_id | category_name | cat_stat |
+-------------+---------------+----------+
| 1 | category1 | 5 |
+-------------+---------------+----------+
| 2 | category2 | 5 |
+-------------+---------------+----------+
| 3 | category3 | 6 |
+-------------+---------------+----------+
| 4 | category4 | 0 |
+-------------+---------------+----------+
| 5 | category5 | 4 |
+-------------+---------------+----------+
谢谢 您可以从
类别开始
,然后将产品映射表与左连接
,最后根据映射表中的一列进行聚合
select category_id, c.category_name, count(pc.category_id) cat_stat
from categories c
left join product_to_categories pc using(category_id)
group by category_id
不需要ifnull()
:count()
从不返回null
值
类别
,因此必须首先提到它(自然左联接从最左边的表中获取公共列的值)选择'category\u id',
`类别名称`,
计数(`product\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
来自`类别`
自然左连接`产品_到_类别`
按“类别”id分组`
非常感谢您的解释!非常有用!