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.由于颜色"蓝色"没有出现在水果表中
这有效:
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,这将变为零.