@gofree

Как объединить запрос в MySQL?

Всем привет. Делаю выборку из таблицы по продажам, что бы собрать статистику за 12 месяцев, не могу разобраться как объединить запросы в один.

SELECT
SUM(`price`) as `sales`,
SUM(`seller_salary`) as `salary`,
DATE_FORMAT(`putdate`, '%Y-%m') as period
FROM `ms_sales`
WHERE `putdate` >= DATE_FORMAT(CURRENT_DATE - INTERVAL 11 MONTH, '%Y-%m-01')
GROUP BY period

SELECT
COUNT(`category_id`) as `m`,
DATE_FORMAT(`putdate`, '%Y-%m') as period
FROM `ms_sales`
WHERE `putdate` >= DATE_FORMAT(CURRENT_DATE - INTERVAL 11 MONTH, '%Y-%m-01') AND `category_id` = '1'
GROUP BY period

SELECT
COUNT(`category_id`) as `t`,
DATE_FORMAT(`putdate`, '%Y-%m') as period
FROM `ms_sales`
WHERE `putdate` >= DATE_FORMAT(CURRENT_DATE - INTERVAL 11 MONTH, '%Y-%m-01') AND `category_id` = '2' OR `category_id` = '3'
GROUP BY period
  • Вопрос задан
  • 44 просмотра
Решения вопроса 1
@galaxy
Во-первых, тут проблемы со скобками:
DATE_FORMAT(CURRENT_DATE - INTERVAL 11 MONTH, '%Y-%m-01' AND `category_id` = '1')

А тут многовато AND, на мой вкус:
AND `category_id` = '2' AND `category_id` = '3'


По поводу объединения:
SELECT
SUM(`price`) as `sales`,
SUM(`seller_salary`) as `salary`,
COUNT(CASE WHEN `category_id` = '1' THEN 1 END) as cat1_count,
COUNT(CASE WHEN `category_id` = '2' OR `category_id` = '3'  THEN 1 END) as cat23_count,
DATE_FORMAT(`putdate`, '%Y-%m') as period
FROM `ms_sales`
WHERE `putdate` >= DATE_FORMAT(CURRENT_DATE - INTERVAL 11 MONTH, '%Y-%m-01')
GROUP BY period


С mysql имел дело давно, не знаю, работает ли там CASE как положено.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы