COUNT意外地对行进行分组

时间:2010-08-10 19:19:49

标签: 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

individual_items会跟踪每个特定项目。

   id   item_type

    1          1 
    2          2        
    3          1           

我在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

然而,COUNT(j.id)正在搞砸我的结果。它似乎是对任何已定义但实际上不存在的项目进行分组。

item_type    item_name  COUNT(j.id)
    1           cake         2
    2           fruit        1
    3           soda         0   

我认为预期的第四行4 water 0没有显示,因为COUNT()错误地将LEFT OUTER JOIN产生的不存在的行分组。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

除了聚合函数中的那些字段外,您应该按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服务器上测试过,上面的代码应该可以运行

答案 1 :(得分:1)

你的GROUP BY条款可能是罪魁祸首。您按照可能不包含项类型的表进行分组,因此在项类型3和4的情况下,j.item_type为NULL(而i.item_type将包含期望值)。如果您按照i上的item_type分组,问题应该自行解决。

答案 2 :(得分:0)

尝试使用RIGHT JOIN。

答案 3 :(得分:0)

尝试

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