Войти Регистрация
Data base

77. LTV за 12 месяцев по когортам первого заказа

Сложная

В orders — заказы покупателей: цена до скидки price_rub, скидка discount_rub, status — bought, returned или canceled.

Когорта покупателя — месяц его первого заказа (любого статуса). LTV — сумма price_rub - discount_rub выкупленных заказов, сделанных строго раньше, чем через 12 месяцев после первого заказа.

Для каждой когорты верните cohort_month (первое число месяца), users и avg_ltv_rub с 2 знаками. Покупатели, у которых всё вернули или отменили, входят в когорту с LTV 0. Порядок — по cohort_month.

В работе: Окупаемость привлечения: сколько приносит покупатель первого года, чтобы сравнить с ценой его привлечения.

Таблицы

orders — заказы

КолонкаТипЧто значит
order_idintключ
user_idintпокупатель
ordered_attimestampвремя заказа
price_rubnumericцена до скидки
discount_rubnumericскидка
statustextbought / returned / canceled

Пример: данные

orders · 8 строк

order_iduser_idordered_atprice_rubdiscount_rubstatus
112025-03-10T12:00:005000500bought
212025-08-01T19:00:0020000bought
312025-09-01T10:00:0030000returned
422025-03-25T08:00:0010000canceled
522025-04-02T21:00:001200200bought
632025-04-05T14:00:0040000returned
742025-04-20T16:00:003000300bought
842026-05-01T10:00:0010000bought

Ожидаемый ответ

cohort_monthusersavg_ltv_rub
2025-03-0123750
2025-04-0121350
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
cohort_month, users, avg_ltv_rub
когортыCTEусловная агрегациядатыNULL

Источник: на данных Wildberries, по мотивам открытой подборки вопросов. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.