#mysql #union
#mysql #объединение
Вопрос:
Мне нужно создать отчет, который подсчитывает количество оплаченных и неоплаченных заказов за данный день и количество позиций в оплаченных и неоплаченных заказах. Вот SQL, который я придумал:
(SELECT COUNT(DISTINCT o1.id) AS n_orders, COUNT(i1.id) AS n_items, date, paid
FROM order o1
JOIN items i1 ON o1.id=i1.order_id
WHERE paid=1
GROUP BY date)
UNION
(SELECT COUNT(DISTINCT o2.id) AS n_orders, COUNT(i2.id) AS n_items, date, paid
FROM order o2
JOIN items i2 ON o2.id=i2.order_id
WHERE paid=0
GROUP BY date)
ORDER BY date
Это создает таблицу с 0-2 строками для каждой даты, в зависимости от того, есть ли оплаченные / неоплаченные заказы на эту дату. Это близко к моему желаемому результату, который представлял бы собой количество оплаченных / неоплаченных заказов и позиций в одной строке на каждую дату. Как я могу этого добиться?
Важно, чтобы сумма была равна 0 для дат, когда не существует оплаченных / неоплаченных заказов.
Комментарии:
1. Итак, вы вроде как хотите развернуть это? 🙂
2. Да, я так думаю. Я никогда полностью не разбирался в концепции «pivot», но, глядя на похожие вопросы, вот и все.