#mysql #sql #analytics #orders
#mysql #sql #аналитика #заказы
Вопрос:
Мне нужно выяснить пользователей, которые отправляли заказы в прошлом месяце, но не в этом месяце. Это мой текущий запрос для подсчета общего числа пользователей, но как я могу перепроверить, чтобы узнать, кто купил в этом месяце, но не в прошлом?
SELECT DISTINCT(customer_user_id)
FROM customer_orders
WHERE created_on > '2020-07-01'
Это моя таблица заказов клиентов
это будет ожидаемый результат, список всех пользователей
РЕДАКТИРОВАТЬ: Кроме того, я пытаюсь получить отчет о пользователях, которые отправляли заказы в июле, но не в августе, с их общей суммой за месяц, количеством заказов и номером мобильного телефона пользователя. Это запрос, который я использую, но он не дает мне результата.
SELECT DISTINCT(co.customer_user_id), SUM(co.amount), COUNT(co.order_id), s.cellphone
FROM customer_orders co
JOIN subscribers s
ON co.customer_user_id = s.user_id
WHERE co.created_on > '2020-07-01'
AND month(co.created_on) <> month(curdate());
Это моя таблица подписчиков, а выше — моя таблица заказов клиентов.
Комментарии:
1. Пожалуйста, отредактируйте вопрос и 1) отметьте платформу db, 2) покажите структуру таблицы, 3) покажите образцы данных. Спасибо
2. Отметьте фактическую СУБД и предоставьте образцы данных и ожидаемый результат.
3. Lol Я просто прошел по маршруту TSQL, прежде чем увидеть mysql:(
4. Извините @TheMuffinMan : (если вы знаете SQL, я был бы признателен за помощь 🙂
5. @OldProgrammer добавил необходимую информацию
Ответ №1:
Как я понял, вы хотите отфильтровать пользователей, которые снова создаются в текущем месяце. Итак,
-- not sure if you really need distinct
SELECT DISTINCT(c.customer_user_id)
FROM customer_orders c
WHERE c.created_on > '2020-07-01'
AND month(c.created_on) <> month(curdate());
Комментарии:
1. Спасибо! Я получаю эту ошибку, хотя » Код ошибки: 1054. Неизвестный столбец ‘c.cd ‘ в предложении ‘where'»
2. Не беспокойтесь, спасибо. итак, этот запрос показывает пользователей, которые создали заказы в июле, но не в августе, правильно?
3. Да, это верно, мы сравниваем значение месяца
created_on
и текущую дату, из которой можно взятьcurdate()
. это не дает ожидаемого результата?4. Это так, я просто хотел понять логику, стоящую за предложением AND. Еще раз спасибо!
5. Обычно процесс говорит, что мы должны задать новый вопрос для этого, но я понял, что вам нужно
group by co.customer_user_id
и для использования мобильного телефонаmax(cellphone)
окончательно удалить distinct…SELECT co.customer_user_id, SUM(co.amount), COUNT(co.order_id), max(s.cellphone) FROM customer_orders co JOIN subscribers s ON co.customer_user_id = s.user_id WHERE co.created_on > '2020-07-01' AND month(co.created_on) <> month(curdate()) group by co.customer_user_id;