Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите пожалуйста составить sql запрос

ксения аджич Знаток (296), на голосовании 6 месяцев назад
Следующий шаг — рассчитать количество пользователей в зависимости от месяца старта когорты и месяца действия. Напишите запрос, который выведет месяц старта когорты, месяц события и количество уникальных пользователей, у которых было хотя бы одно событие.
Не забудьте добавить запрос из предыдущего задания в общее табличное выражение.

Запрос из предыдущего задания
SELECT DISTINCT u.user_id,
MIN(DATE_TRUNC('month', e.event_time)):: date AS cohort_users_cnt
from tools_shop.users as u
JOIN tools_shop.orders as o ON u.user_id = o.user_id
JOIN tools_ shop.events as e ON u.user_id = e.user_id
GROUP BY u.user_id;

схема tools_shop
таблица users:
user_id-идентификатор пользователя
created_at-дата создания аккаунта пользователя

таблица events
event_id-идентификатор события
event_time-дата и время события
event_name-название события

таблица orders
order_id-идентификатор заказа
user_id-идентификатор пользователя оформившего заказ
created_at-дата, когда пользователь оформил заказ но не оплатил его
paid_at-дата оплаты заказа
Голосование за лучший ответ
Аноним Профи (890) 7 месяцев назад
 WITH cohort_users AS ( 
SELECT DISTINCT u.user_id,
MIN(DATE_TRUNC('month', u.created_at))::date AS cohort_month
FROM tools_shop.users AS u
JOIN tools_shop.orders AS o ON u.user_id = o.user_id
JOIN tools_shop.events AS e ON u.user_id = e.user_id
GROUP BY u.user_id
)

SELECT
cohort_month AS cohort_start_month,
DATE_TRUNC('month', e.event_time)::date AS event_month,
COUNT(DISTINCT cu.user_id) AS unique_users_count
FROM cohort_users cu
JOIN tools_shop.events e ON cu.user_id = e.user_id
GROUP BY cohort_month, event_month
ORDER BY cohort_start_month, event_month;
Евелина Бладина Ученик (114) 6 месяцев назад
WITH cohort AS (
SELECT o.user_id,
MIN(CAST(DATE_TRUNC('month', e.event_time) AS DATE)) AS cohort_month
FROM tools_shop.orders o
JOIN tools_shop.users u ON u.user_id = o.user_id
JOIN tools_ shop.events e ON e.user_id = u.user_id
GROUP BY o.user_id
)
SELECT
cohort_month AS cohort_month,
CAST(DATE_TRUNC('month', e.event_time) AS DATE) AS event_month,
COUNT(DISTINCT c.user_id) AS unique_users
FROM cohort c
JOIN tools_ shop.events e ON e.user_id = c.user_id
GROUP BY cohort_month, event_month
ORDER BY cohort_month, event_month;
Похожие вопросы