mysql - COUNT 正在对行进行意外分组

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

Table individual_items keeps track of each specific item.

   id   item_type

    1          1 
    2          2        
    3          1           

My query in 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 产生的不存在的行分组加入。我该如何解决这个问题?

最佳答案

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

关于mysql - COUNT 正在对行进行意外分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3452597/

相关文章:

python - Pandas:滚动窗口来计算频率 - 最快的方法

mysql - 如何使用单个日期列及时提取时间?

如果任何值为 null,Mysql 使 AVG 返回 null

search - Elasticsearch每个groupId的聚合唯一属性

javascript - 使用 JavaScript 进行计数

sql - Postgresql 按重叠时间分组

sql - 如何插入非分组数据

c# - ILookup<TKey, TVal> 与 IGrouping<TKey, TVal>

php - 如何用数据库中的数据填充 addMultiOptions

php - 使用面向对象的 php 在 mysqli 函数中更新查询