2014-01-20 5 views
0

У меня есть следующий запрос в MySQL:Проблема с функцией SUM в MySQL

SELECT DISTINCT(A.lineId), A.title, A.label, A.price * OD.quantity FROM Additional A JOIN OrderDetail OD ON A.orderId=OD.orderId WHERE A.orderId=179 ORDER BY A.lineId 

http://imagizer.imageshack.us/v2/800x600q90/839/kfzq.png

Все нормально на данный момент, но если я использую функцию SUM над A.price * OD.quantity, он должен дать мне " 176 ", и не так ли. Смотри:

http://imagizer.imageshack.us/v2/800x600q90/802/kh4f.png

Почему это происходит?

+0

Вам нужно предложение GROUP BY, если вы хотите что-то СУЩЕСТВУЕТ. Я не уверен, что вы хотите подытожить на данный момент ... – ToBe

+0

У меня возникло бы желание дать «A.price * OD.quantity» псевдоним «A.price * OD.quantity AS PQ», чтобы избежать улучшения семантики, как изначально звездочки читаются как умножение, im не уверен, что mysql интерпретирует это как это? Похоже, Linoff знает больше ... – Opentuned

+0

Если вы выходите из «Distinct», данные возвращают суммы 352? –

ответ

2

Вот ваш запрос:

SELECT DISTINCT(A.lineId), A.title, A.label, A.price * OD.quantity 
FROM Additional A JOIN 
    OrderDetail OD 
    ON A.orderId=OD.orderId 
WHERE A.orderId=179 
ORDER BY A.lineId; 

Первая строка эквивалентна:

SELECT DISTINCT A.lineId, A.title, A.label, A.price * OD.quantity 

Таким образом, он возвращает строку, когда все четыре значения различны. Скобки не означают ничего. HOWEVER, у вас могут быть дублированные строки, которые отсутствуют. Вы, вероятно, получите разные результаты, когда вы делаете:

SELECT A.lineId, A.title, A.label, A.price * OD.quantity 

Это это данные о том, что сумма использования. Если вы хотите sum на различных значений, используйте подзапрос:

SELECT LineId, Title, Label, sum(pg) 
FROM (SELECT DISTINCT A.lineId, A.title, A.label, A.price * OD.quantity as pq 
     FROM Additional A JOIN 
      OrderDetail OD 
      ON A.orderId=OD.orderId 
     WHERE A.orderId=179 
    ) t; 

Обычно необходимость такого запроса предполагает, что что-то совершенно неправильно с данными.

+0

Большое спасибо. – nandophillips

0

Я считаю, что вы пытаетесь их умножить, а не добавлять. Проверьте это, посмотрите, поможет ли это вообще Sum Two Columns in Two Mysql Tables

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