Подсчитывать оплаченные и неоплаченные заказы и элементы в одном или двух запросах

#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», но, глядя на похожие вопросы, вот и все.