группа испортила мои счета MySQL

0

У меня есть базовая таблица:

id  client  trans_date  returned
1    bob    20180301       0
2    frank  20180301       0
3    bob    20180401       1

id хотел получить результат, который группирует клиент, и подсчитывает, сколько купленных предметов и сколько их вернули. Как это

name  bought returned
bob    1       1
frank  1       0

Я попробовал это, но он не работал

SELECT 
     soldto AS name,
     IF(return=0,count(id),'0') AS bought,
     IF(return=1,count(id),'0') AS returned 
FROM sales 
WHERE sdate BETWEEN '20180201000000' AND '20180501000000'
group by soldto;
  • 0
    Какой выход вы получили?
  • 0
    Похоже, bob купил 2 и вернуть 1?
Теги:
if-statement
group-by

1 ответ

0
Лучший ответ

Использовать условную агрегацию

SELECT 
     soldto AS name,
     COUNT(*) AS bought,
     -- or maybe COUNT( CASE WHEN return = 0 THEN 1 END) AS bought,
     COUNT( CASE WHEN return = 1 THEN 1 END) AS returned 
FROM sales 
WHERE sdate BETWEEN '20180201000000' AND '20180501000000'
GROUP BY soldto;
  • 0
    Я использовал сумму вместо количества выберите имя клиента AS, сумма (CASE returnitem, когда «0», затем 1 или 0 конец), как куплено, сумма (CASE returnitem, когда «1», затем 1 или 0 конец), как возвращено от продаж, ГДЕ «20180201000000» и «20180501000000» клиент GROUP BY
  • 0
    Мне нравится использовать COUNT() для подсчета. Если вы не включили ELSE для CASE верните NULL и COUNT() не будет считаться нулевым

Ещё вопросы

Сообщество Overcoder
Наверх
Меню