我有这样的桌子:SQLFIDDLE
我在试着计算每个类别中有多少产品
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 |
+-------------+---------------+----------+谢谢!
发布于 2020-10-09 10:33:20
categories,因此必须首先提到它(自然左联接从最左边的表中获取公共列的值)。SELECT `category_id`,
`category_name`,
COUNT(`product_to_categories`.`category_id`) cat_stat
FROM `categories`
NATURAL LEFT JOIN `product_to_categories`
GROUP BY `category_id`发布于 2020-10-09 10:22:46
您可以从categories开始,然后带left join的产品映射表,最后从映射表中依靠一列进行聚合。
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值。
https://stackoverflow.com/questions/64278112
复制相似问题