mysql multi count and sum with WHERE

я пытаюсь построить запрос, чтобы проверить мой запас.

SELECT COUNT(*) AS item_count,
reseller_id, sum(sold) as
sold_count, sum(refunded) as
refunded_count,**sum(case price when
refunded <> 1 AND sold=1) as pricesum** FROM stock
GROUP BY
reseller_id ORDER BY sold_count ASC

Приведенный выше запрос выберет все товары и сгруппирует их по каждому торговому посреднику с указанием общего количества товаров и количества возвратов. Часть, выделенная жирным шрифтом, неверна, я хочу получить общую цену (которая представляет собой сумму для невозвращенных + проданных для каждого из торговых посредников (обратите внимание, что я группирую по идентификатору торгового посредника)


person TDSii    schedule 18.04.2011    source источник
comment
сумма(цена случая при возврате ‹› 1 И продано=1 потом что-то еще что-то_еще конец)   -  person Nicola Cossu    schedule 19.04.2011
comment
возможно, мне не хватает логики дел, поэтому я не знаю, как это должно быть сделано.   -  person TDSii    schedule 19.04.2011


Ответы (3)


Что-то вроде этого с операторами case может работать:

SUM(CASE
    WHEN refunded <> 1 AND sold = 1
        THEN price
    ELSE
        0
    END)
person Kyle Sletten    schedule 18.04.2011
comment
#1064 - У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, на предмет правильного синтаксиса для использования рядом с «ВЫБЕРИТЕ СЛУЧАЙ цена, КОГДА возмещено ‹> 1 И продано = 1, ТОГДА цена ИНАЧЕ 0 КОНЕЦ СЛУЧАЯ) а» в строке 1 - person TDSii; 19.04.2011
comment
Извините, это моя ошибка, я не уверен, что оператор SELECT должен был быть там. - person Kyle Sletten; 19.04.2011

Вещи, которые я заметил:

  • Вы не закончили свое дело. Это делается простым написанием "конец"
  • Вы не указали другой случай
person rzetterberg    schedule 18.04.2011
comment
возможно, это можно решить без чехла, я просто хочу суммировать цены, исходя из того, ГДЕ .. - person TDSii; 19.04.2011
comment
да, тогда вам вообще не понадобится случай, если вы собираетесь основывать результат предложения where. - person rzetterberg; 19.04.2011
comment
тогда, пожалуйста, отредактируйте свой ответ. если вы правильно поняли мой вопрос - person TDSii; 19.04.2011
comment
в этом случае вам просто нужно написать сумму (цену). - person rzetterberg; 19.04.2011
comment
помните, я хочу суммировать цены только тогда, когда они проданы, а не возвращены, ни один запрос до сих пор не смог решить эту проблему. - person TDSii; 19.04.2011
comment
Тогда зачем писать, что я просто хочу суммировать цены на основе ГДЕ? Вам нужно быть более ясным, если люди собираются помочь вам. - person rzetterberg; 19.04.2011

Попробуйте сделать подзапрос, например:

SELECT SUM(price) FROM stock WHERE refunded != 1 AND sold = 1

Полный запрос будет выглядеть так:

SELECT
  COUNT(*) AS item_count,
  reseller_id,
  SUM(sold) as sold_count,
  SUM(refunded) as refunded_count,
  (SELECT SUM(price) FROM stock WHERE refunded != 1 AND sold = 1 WHERE reseller_id=1 GROUP BY reseller_id) as pricesum
FROM stock
WHERE reseller_id=1
GROUP BY reseller_id
ORDER BY sold_count ASC
person Alp    schedule 18.04.2011
comment
подчиняется ли этот подзапрос группе по reseller_id? - person TDSii; 19.04.2011
comment
вы правы, запрос нужен такой же где и группировать по параметрам как и основной запрос. я отредактирую ответ - person Alp; 19.04.2011