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)