У меня есть этот запрос для проверки показателей продаж за последние 3 месяца и еще один запрос для проверки показателей возврата. Я хотел бы отобразить их в виде таблицы:
сент. $ 100 $ 20
Авг $ 200 $ 10
Июль $ 150 $ 0
Но я не уверен, что было бы лучше попытаться объединить 2 запроса в один. Я попытался поместить цикл foreach для возмещения в цикле foreach продаж, но это привело к 6 строкам вместо 3.
// sales
SELECT DATE_FORMAT(order_date, '%b') as month, SUM(order_total) as totalSales FROM
(
SELECT order_date, order_total
FROM order_summary
WHERE order_date <= NOW()
and order_date >= Date_add(Now(),interval - 3 month)
AND `order_status` = 'Approved'
UNION ALL
SELECT Date_add(Now(),interval - 2 month) AS order_date, 0 as order_total
UNION ALL
SELECT Date_add(Now(),interval - 1 month) AS order_date, 0 as order_total
UNION ALL
SELECT Now() AS order_date, 0 as order_total
) as test
GROUP BY DATE_FORMAT(order_date, '%m-%Y')
ORDER BY DATE_FORMAT(order_date, '%m-%Y') DESC
// refunds
SELECT DATE_FORMAT(credit_date, '%b') as month, SUM(`credit_value`) as totalCredit FROM
(
SELECT credit_value, credit_date
FROM credit
WHERE credit_date <= NOW()
and credit_date >= Date_add(Now(),interval - 3 month)
AND `reason` = 'Refund'
UNION ALL
SELECT Date_add(Now(),interval - 2 month) AS credit_date, 0 as credit_value
UNION ALL
SELECT Date_add(Now(),interval - 1 month) AS credit_date, 0 as credit_value
UNION ALL
SELECT Now() AS credit_date, 0 as credit_value
) as test
GROUP BY DATE_FORMAT(credit_date, '%m-%Y')
ORDER BY DATE_FORMAT(credit_date, '%m-%Y') DESC
");
ОБНОВЛЕНИЕ ПОСЛЕ О. Джонс ОТВЕТ
SELECT a.month, a.totalSales, b.totalCredit
FROM (SELECT DATE_FORMAT(order_date, '%b') as month, SUM(order_total) as totalSales, DATE(DATE_FORMAT(order_date, '%Y-%m-01')) month_starting FROM
(
SELECT order_date, order_total
FROM order_summary
WHERE order_date <= NOW()
and order_date >= Date_add(Now(),interval - 3 month)
AND `order_status` = 'Approved'
UNION ALL
SELECT Date_add(Now(),interval - 2 month) AS order_date, 0 as order_total
UNION ALL
SELECT Date_add(Now(),interval - 1 month) AS order_date, 0 as order_total
UNION ALL
SELECT Now() AS order_date, 0 as order_total
) as test
GROUP BY DATE_FORMAT(order_date, '%m-%Y')
ORDER BY DATE_FORMAT(order_date, '%m-%Y') DESC) a
JOIN ( SELECT DATE_FORMAT(credit_date, '%b') as month, SUM(`credit_value`) as totalCredit, DATE(DATE_FORMAT(credit_date, '%Y-%m-01')) month_starting FROM
(
SELECT credit_value, credit_date
FROM credit
WHERE credit_date <= NOW()
and credit_date >= Date_add(Now(),interval - 3 month)
AND `reason` = 'Refund'
UNION ALL
SELECT Date_add(Now(),interval - 2 month) AS credit_date, 0 as credit_value
UNION ALL
SELECT Date_add(Now(),interval - 1 month) AS credit_date, 0 as credit_value
UNION ALL
SELECT Now() AS credit_date, 0 as credit_value
) as test
GROUP BY DATE_FORMAT(credit_date, '%m-%Y')
ORDER BY DATE_FORMAT(credit_date, '%m-%Y') desc ) b ON a.month_starting = b.month_starting
ORDER BY a.month_starting