Mysql COUNT正在对行进行意外分组

Mysql COUNT正在对行进行意外分组,mysql,count,group-by,Mysql,Count,Group By,表items记录了可以存储的不同类型的项目 item_type item_name last_stock 1 cake 2010-08-10 2 fruit 2010-08-07 3 soda 2010-08-07 4 water 2010-08-09 我在MySQL中的查询: SELECT i.item_type, i.item_name, COUNT(j.id)

items
记录了可以存储的不同类型的项目

item_type item_name last_stock 1 cake 2010-08-10 2 fruit 2010-08-07 3 soda 2010-08-07 4 water 2010-08-09 我在MySQL中的查询:

SELECT i.item_type, i.item_name, COUNT(j.id)
FROM items i
LEFT OUTER JOIN individual_items j
ON i.item_type = j.item_type
GROUP BY j.item_type
然而,
计数(j.id)
与我的结果不符。它似乎在对任何已定义但实际上不存在的项进行分组

item_type item_name COUNT(j.id) 1 cake 2 2 fruit 1 3 soda 0 项目类型项目名称计数(j.id) 1蛋糕2 2水果1 3苏打水0
我认为预期的第四行
4 water 0
没有出现,因为
COUNT()
对由
左侧外部联接产生的不存在的行进行了错误分组。如何解决此问题?

尝试使用右联接。

尝试使用右联接。

您应该按SELECT语句中的所有字段分组,聚合函数中的字段除外

SELECT i.item_type, i.item_name, COUNT(j.id)
FROM items i
LEFT OUTER JOIN individual_items j
ON i.item_type = j.item_type
GROUP BY i.item_type, i.item_name

更新:我已经在本地mysql服务器上进行了测试,上面的代码应该可以运行

您应该按照SELECT语句中的所有字段进行分组,聚合函数中的字段除外

SELECT i.item_type, i.item_name, COUNT(j.id)
FROM items i
LEFT OUTER JOIN individual_items j
ON i.item_type = j.item_type
GROUP BY i.item_type, i.item_name

更新:我已经在我的本地mysql服务器上进行了测试,上面的代码应该可以运行

您的
groupby
子句可能就是罪魁祸首。您按照可能不包含项目类型的表进行分组,因此在项目类型3和4的情况下,j.item_type为NULL(而i.item_type将包含预期值)。如果改为按i上的项目类型分组,问题应该会自行解决。

您的
group by
子句可能是罪魁祸首。您按照可能不包含项目类型的表进行分组,因此在项目类型3和4的情况下,j.item_type为NULL(而i.item_type将包含预期值)。如果改为按i上的项目类型分组,则问题应自行解决。

尝试

SELECT i.item_type, i.item_name, COUNT(j.id)
FROM items i
LEFT OUTER JOIN individual_items j
ON i.item_type = j.item_type
GROUP BY i.item_type,i.item_name
试一试


因为对于item_类型3和item_类型4,j.item_类型具有相同的值-NULL。MySQL将这两行分组在一起,因为它们共享一个按值分组的公共组。因为对于item_type 3和item_type 4,j.item_type具有相同的值-NULL。MySQL正在将这两行分组在一起,因为它们按值共享一个公共组。这将为item_类型3和4输出计数1。您应该使用计数(j.id),这也将为项目类型3和4输出计数1。您应该使用COUNT(j.id)