У меня есть базовая таблица:
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;
Использовать условную агрегацию
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;
COUNT()
для подсчета. Если вы не включили ELSE
для CASE
верните NULL
и COUNT()
не будет считаться нулевым
bob
купил 2 и вернуть 1?