使用LEFT JOIN和GROUP BY的COUNT(*)在MySQL中包含NULL

den*_*ise 3 mysql join group-by

我试图从包含外表中外观计数的表中获取结果.该表可以有0个或更多个外观.

如下例所示:

表:颜色

+------+---------+
|  id  |   name  |
+------+---------+
|  1   |   red   |
|  2   |   blue  |
|  3   |  yellow |
|  4   |  green  |
+------+---------+
Run Code Online (Sandbox Code Playgroud)

桌子:水果

+--------+----------+
|  name  | color_id |
+--------+----------+
| apple  |    1     |
| banana |    3     |
| grape  |    4     |
| lemon  |    3     |
+--------+----------+
Run Code Online (Sandbox Code Playgroud)

所以我需要列出水果表中的每种颜色和事件,返回如下内容:

1, red, 1
2, blue, 0
3, yellow, 2
4, green, 1
Run Code Online (Sandbox Code Playgroud)

我正在尝试这个查询:

SELECT `c`.`id`, `c`.`name`, COUNT(1)
FROM color `c`
LEFT JOIN fruit `f`
ON `c`.`id` = `f`.`color_id`
GROUP BY `c`.`id`
Run Code Online (Sandbox Code Playgroud)

此查询返回"蓝色"而不是0的计数1.由于颜色"蓝色"没有出现在水果表中

faf*_*afl 9

这有效:

SELECT c.id, COUNT(f.name)
FROM color c
LEFT JOIN fruit f ON c.id = f.color_id
GROUP BY c.id
Run Code Online (Sandbox Code Playgroud)

您必须计算一个水果字段,以便可以返回NULL,这将变为零.