Как посчитать уникальные заказы за период?
Задание: Для каждой даты в таблице user_actions посчитайте количество первых заказов, совершённых пользователями.
Первыми заказами будем считать заказы, которые пользователи сделали в нашем сервисе впервые. В расчётах учитывайте только неотменённые заказы.
В результат включите две колонки: дату и количество первых заказов в эту дату. Колонку с датами назовите date, а колонку с первыми заказами — first_orders.
Результат отсортируйте по возрастанию даты.
Поля в результирующей таблице: date, first_orders
Пояснение:
Учитывайте, что у каждого пользователя может быть всего один первый заказ (что вполне логично).
WITH subquery_1 AS ( SELECT MAX(time)::DATE as date, order_id FROM user_actions WHERE order_id NOT IN ( SELECT order_id FROM user_actions WHERE action = 'cancel_order') GROUP BY order_id ) SELECT date, COUNT(DISTINCT order_id) AS first_orders FROM ( SELECT * FROM subquery_1) AS t GROUP BY date ORDER BY date |
WITH subquery_1 AS ( SELECT MAX(time)::DATE as date, order_id FROM user_actions WHERE order_id NOT IN ( SELECT order_id FROM user_actions WHERE action = 'cancel_order') GROUP BY order_id ) SELECT date, COUNT(DISTINCT order_id) AS first_orders FROM ( SELECT * FROM subquery_1) AS t GROUP BY date ORDER BY date
Выдает больше записей, не только один заказ.
Мой вывод:
date | first_orders 24/08/22 | 138 25/08/22 | 1,059 26/08/22 | 1,447 |
date | first_orders 24/08/22 | 138 25/08/22 | 1,059 26/08/22 | 1,447
Ожидаемый:
date | first_orders 24/08/22 | 127 25/08/22 | 802 26/08/22 | 984 |
date | first_orders 24/08/22 | 127 25/08/22 | 802 26/08/22 | 984
Дополнительно:
Вы точно уверены, что MAX(time) вернёт дату самого первого заказа?
select t.date, count(*) from (SELECT min(time)::DATE as date, user_id FROM user_actions WHERE action != 'cancel_order' GROUP BY user_id ) as t group by date; |
select t.date, count(*) from (SELECT min(time)::DATE as date, user_id FROM user_actions WHERE action != 'cancel_order' GROUP BY user_id ) as t group by date;
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для того чтобы посчитать уникальные заказы за определенный период, вам потребуется выполнить следующие шаги:
1. Сначала необходимо получить данные о всех заказах за указанный период из вашей базы данных. Для этого используйте SQL запрос, который выберет все заказы с датой создания в заданном диапазоне. Например, если у вас есть таблица "orders" с полями "id" и "created_at", то запрос может выглядеть примерно так:
SELECT * FROM orders WHERE created_at BETWEEN 'начальная_дата' AND 'конечная_дата';
2. После того как вы получили список всех заказов за период, вам нужно определить уникальные заказы. Для этого можно воспользоваться функцией COUNT(DISTINCT), которая подсчитает количество уникальных значений в столбце. Например:
SELECT COUNT(DISTINCT id) AS unique_orders_count FROM orders WHERE created_at BETWEEN 'начальная_дата' AND 'конечная_дата';
3. После выполнения этого запроса, вы получите количество уникальных заказов за указанный период. Теперь у вас есть необходимая информация для дальнейшей обработки или отображения пользователю.
Это простой способ посчитать уникальные заказы за период с использованием SQL запросов. Не забудьте заменить 'начальная_дата' и 'конечная_дата' на реальные значения дат вашего периода.