Как посчитать уникальные заказы за период?

Ссылка скопирована
1 ответ

Задание: Для каждой даты в таблице 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) вернёт дату самого первого заказа?

  • Akina, спасибо за обратную связь. Да, я уверен. На мой взгляд ошибка в том, что не у каждого пользователя указывается один заказ, некоторые юзеры дублируются. Как исключить повторения подсчета order_id для каждого user_id?
  • WHATsMyName, а мне тоже кажется что вы зря уверены
  • Дмитрий, возможно ошибаюсь. Попытался сделать проверку, не получилось. Какие ваши мысли по поводу решения задачи?
  • 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;

  • Дмитрий, мое почтение! Премного благодарен.
  • WHATsMyName, да не за что. но не могу не отметить что согласно правилам ресурса не стоит использовать этот ресурс для решения задач.
  • Дмитрий, буду знать, спасибо
  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Роман IT Ответ

    Для того чтобы посчитать уникальные заказы за определенный период, вам потребуется выполнить следующие шаги:

    1. Сначала необходимо получить данные о всех заказах за указанный период из вашей базы данных. Для этого используйте SQL запрос, который выберет все заказы с датой создания в заданном диапазоне. Например, если у вас есть таблица "orders" с полями "id" и "created_at", то запрос может выглядеть примерно так:

    SELECT * FROM orders WHERE created_at BETWEEN 'начальная_дата' AND 'конечная_дата';

    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 'конечная_дата';

    SELECT COUNT(DISTINCT id) AS unique_orders_count FROM orders WHERE created_at BETWEEN 'начальная_дата' AND 'конечная_дата';

    3. После выполнения этого запроса, вы получите количество уникальных заказов за указанный период. Теперь у вас есть необходимая информация для дальнейшей обработки или отображения пользователю.

    Это простой способ посчитать уникальные заказы за период с использованием SQL запросов. Не забудьте заменить 'начальная_дата' и 'конечная_дата' на реальные значения дат вашего периода.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно