2015-12-11 2 views
0

Я думаю, что мне не хватает простого шага здесь, но я не могу понять это. Я читал другие темы, и они говорят о группировке, но я, похоже, не собираюсь все вместе.Расчет суммы количества * цена за единицу в mysql

У меня есть простая таблица, в которой хранятся транзакции с ценными бумагами. В каждой строке есть количество и цена. Я хочу получить сумму количества и сумму каждой цены * каждой величины.

Вот мой вопрос. Если я удалю группировку, я получаю 1 результат, который умножается на количество строк в таблице. Если я добавлю группировку, я получаю правильный результат несколько раз. Я что-то упустил? Мне просто хочется запустить запрос, чтобы получить результаты 20k, когда все они содержат одни и те же данные, будет бессмысленным.

SELECT (SUM(i.quantity) - IFNULL(SUM(s.quantity), 0)) AS quantity, 
SUM(i.unitprice * i.quantity) AS totalprice 

FROM 02_01_transactions t 

LEFT JOIN 02_01_transactions i 
ON i.type = 1 
AND i.active = 1 

LEFT JOIN 02_01_transactions s 
ON s.type = 2 
AND s.active =1 

GROUP BY t.id 
+0

Ваш присоединяется, безусловно, не так. Вы пытаетесь сделать какой-то фильтр и применить отрицательный знак к транзакциям типа 2? Я предполагаю, что 20k - это намного больше транзакций, чем вы ожидали. – shawnt00

+0

Почему вы присоединяетесь к одному и тому же столу? Разве не нужно выбирать с группой By, чтобы дать вам свой результат? Основываясь на запрошенном вами сообщении, я не вижу необходимости в этих объединениях, и кажется, что они являются причиной того, что вы получаете правильный результат несколько раз. –

ответ

1

Не уверен, что существует необходимость для объединения (вы не вступать в какой-либо общей стоимости) или типа = 2 строки, если вы просто вычесть их. Есть ли причина, почему следующее не работает?

-- Total quantity, total price of all type 1, active transactions. 

SELECT SUM(quantity) AS quantity, 
     SUM(unitprice * quantity) AS totalprice 
FROM 02_01_transactions 
WHERE type = 1 
AND active = 1 
1

Вот моя догадка, что вы пытаетесь достичь:

select 
    sum(quantity * case type when 1 then 1 when 2 then -1 end) as quantity, 
    sum(unitprice * quantity) as totalprice 
from 02_01_transactions 
where type in (1, 2) and active = 1 
+0

+1 Я подозреваю, что OP также может захотеть «отменить» количество от типа = 2 строки в калькуляции totalprice. – spencer7593

+0

@ spencer7593 Я сделал аналогичный комментарий по другому ответу (и затем удалил его.) Я согласен и решил, что OP, вероятно, написал бы это таким образом, если это было намерением. – shawnt00

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