首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL计数和IFNULL

MySQL计数和IFNULL
EN

Stack Overflow用户
提问于 2020-10-09 10:19:39
回答 2查看 142关注 0票数 2

我有这样的桌子:SQLFIDDLE

我在试着计算每个类别中有多少产品

代码语言:javascript
复制
SELECT `category_id`, `category_name`, IFNULL(count(*),0) cat_stat 
FROM 
    `product_to_categories`
NATURAL JOIN 
    `categories`
GROUP BY `category_id`

除了IFNULL部分外,它几乎是工作的。

我收到:

代码语言:javascript
复制
+-------------+---------------+----------+
| category_id | category_name | cat_stat |
+-------------+---------------+----------+
| 1           | category1     | 5        |
+-------------+---------------+----------+
| 2           | category2     | 5        |
+-------------+---------------+----------+
| 3           | category3     | 6        |
+-------------+---------------+----------+
| 5           | category5     | 4        |
+-------------+---------------+----------+

但我也希望得到零结果:

代码语言:javascript
复制
+-------------+---------------+----------+
| category_id | category_name | cat_stat |
+-------------+---------------+----------+
| 1           | category1     | 5        |
+-------------+---------------+----------+
| 2           | category2     | 5        |
+-------------+---------------+----------+
| 3           | category3     | 6        |
+-------------+---------------+----------+
| 4           | category4     | 0        |
+-------------+---------------+----------+
| 5           | category5     | 4        |
+-------------+---------------+----------+

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-09 10:33:20

  1. 自然连接==自然内部连接,而您需要外部连接。
  2. 基表是categories,因此必须首先提到它(自然左联接从最左边的表中获取公共列的值)。
  3. 您必须计算确定的列,而不是公共列或总行数(它们将给出1,而不是0)。
代码语言:javascript
复制
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`
票数 1
EN

Stack Overflow用户

发布于 2020-10-09 10:22:46

您可以从categories开始,然后带left join的产品映射表,最后从映射表中依靠一列进行聚合。

代码语言:javascript
复制
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值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64278112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档