2010-08-10 63 views
0

items跟蹤可以存儲的不同類型的項目。COUNT意外地將行分組

 
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導致子虛烏有行。我怎樣才能解決這個問題?

回答

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

GROUP BY條款可能是這裏的罪魁禍首。您正在按可能不包含項目類型的表進行分組,因此對於項目類型3和4,j.item_type爲NULL(而i.item_type將包含期望值)。如果您通過我的item_type進行分組,則問題應該自行解決。

+1

因爲兩者ITEM_TYPE 3和4 ITEM_TYPE,j.item_type具有相同的值 - NULL。 MySQL將這兩行分組在一起,因爲它們共享一個共同的分組值。 – 2010-08-10 19:35:34

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 
+0

這將爲item_type 3和4輸出計數1。你應該使用COUNT(j.id) – 2010-08-10 19:38:23

+0

謝謝,修正它 – SQLMenace 2010-08-10 19:50:53