#sql #analysis #orders
#sql #анализ #заказы
Вопрос:
Итак, я запускаю этот запрос, чтобы получить имя клиента, общую сумму заказа и количество отправленных им заказов. С помощью этого запроса я получаю всю их историю с марта по июль, мне нужно название, общая сумма за март / # заказов, общая сумма за апрель / # заказов, общая сумма за май / # заказов и т.д.
SELECT customer_name,MONTH(created_on), SUM(amount), COUNT(order_id)
FROM customer_orders
WHERE created_on BETWEEN '2020-03-01' AND '2020-08-01'
GROUP BY customer_name, MONTH(created_on)
Комментарии:
1. Ваш запрос, похоже, выполняет то, что вы хотите.
Ответ №1:
Если вы хотите, чтобы значения находились в отдельных столбцах, используйте условную агрегацию:
SELECT customer_name,
SUM(CASE WHEN MONTH(created_on) = 3 THEN amount END) as march_amount,
SUM(CASE WHEN MONTH(created_on) = 3 THEN 1 ELSE 0 END) as march_count,
SUM(CASE WHEN MONTH(created_on) = 4 THEN amount END) as april_amount,
SUM(CASE WHEN MONTH(created_on) = 4 THEN 1 ELSE 0 END) as april_count,
. . .
FROM customer_orders
WHERE created_on >= '2020-03-01' AND
created_on < '2020-08-01'
GROUP BY customer_name;
Обратите внимание, что я изменил фильтр даты, чтобы он не включал 2020-08-01.
Комментарии:
1. Спасибо! Я добавил остальные значения СУММ для других месяцев, но я получаю эту ошибку «Код ошибки: 1064. У вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘FROM rv_customer_orders WHERE created_on>= ‘2020-03-01’ И created_on < ‘ в строке 12»
2. @Neykof . . . У вас, вероятно, есть запятая перед
on
предложением.3. Я выполнял некоторую проверку данных и понял, что при запуске запроса отсутствуют некоторые заказы. Есть ли какая-либо причина, по которой некоторые заказы могут быть пропущены, о которой вы можете подумать?
4. @Neyko . . . Это привело бы к пропуску заказов, которые не соответствуют условию на
created_on
.