2013-08-26 88 views
0

我有2個表:MySQL的 - 總和一個表加入另一個表

1.items

+-------+---------+ 
|itemID | itemName| 
+-----------------+ 
|1  | Item1 | 
|2  | Item2 | 
+-------+---------+ 

2.purchases

+-----------+--------+--------+-----------+ 
|purchaseID | userID | itemID | itemAmount| 
+-----------+--------+--------+-----------+ 
|1   | 1  | 1  | 3   | 
|2   | 2  | 1  | 4   | 
|3   | 1  | 2  | 5   | 
+-----------+--------+--------+-----------+ 

我的MySQL的代碼的簡化版本如下這個:

SELECT 
    items.itemID, 
    SUM(purchases.itemAmount) 
FROM items 
    LEFT OUTER JOIN purchases ON items.itemID = purchases.itemID 

我想結果是這樣的:

+-------+-----------+ 
|itemID | itemAmount| 
+-------------------+ 
|1  | 7   | 
|2  | 5   | 
+-------+-----------+ 

但相反,這是結果:

+-------+-----------+ 
|itemID | itemAmount| 
+-------------------+ 
|1  | 12  | 
+-------+-----------+ 

這是爲什麼,我該如何解決? 謝謝:)

+0

在查詢中使用GROUP BY。 – PinnyM

回答

2

以下內容添加到您的查詢的末尾:

GROUP BY items.itemID 

出現這種情況的原因是因爲SQL引擎不知道你要總結每次的itemId量列。它只是總結它們。如果你想改變這種行爲,那麼這就是GROUP BY的用途。這也適用於所有其他聚合函數(MINMAXCOUNT等)。

你可能會對自己說,「如果它不知道如何按我告訴它選擇的組合(SELECT itemId ...),那爲什麼它會返回值1?」。這是一個很好的問題,而且返回的價值大部分確實是不可預測的。它實際上可能在某個時刻開始返回2或表中的其他itemId。因此,許多SQL引擎不允許指定不包含在GROUP BY子句中的非聚合 - 也就是說,如果您嘗試這樣做,它們將引發錯誤。 MySQL不關心這個窘境並返回一個結果,因爲它可能是不可預測的。

+0

非常感謝!我只是回頭看看我的原始代碼,而且我確實有一個GROUP BY子句,但我偶然將錯誤的列分組了!因此,當我刪除GROUP BY行時,它不會影響結果,因此我認爲它不是問題的一部分。 現在,我知道了!非常感謝! –

相關問題