2013-08-26 3 views
0

У меня есть 2 таблицы:MySQL - SUM для одной таблицы присоединяется к другой таблице

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. И это справедливо и для всех других агрегатных функций (MIN, MAX, COUNT и т. Д.).

Вы можете сказать себе: «Если он не знает, как сгруппировать то, что я сказал ему, чтобы выбрать (SELECT itemId ...), то почему он возвращает значение 1?». Это большой вопрос, и ценность, которая вернется, действительно будет непредсказуемой по большей части. Фактически, в какой-то момент начните возвращать 2 или какой-либо другой элемент в вашей таблице. По этой причине многие SQL-механизмы не позволяют указывать неагрегаты, которые не включены в предложение GROUP BY, то есть они будут вызывать ошибку, если вы попробуете это. MySQL не заботится об этом затруднении и возвращает результат как непредсказуемый, как может быть.

+0

Большое спасибо! Я просто посмотрел на свой оригинальный код, и у меня было предложение GROUP BY, но я случайно группировал неправильный столбец! Из-за этого, когда я удалил строку GROUP BY, это не повлияло на результаты, и поэтому я предположил, что это не является частью проблемы. Теперь, я знаю, что это было! Спасибо! –

Смежные вопросы