В payments — оплаты подписки: пользователь платит раз в месяц, но бывают повторные списания (смена карты, возврат и новая оплата).
Когорта пользователя — календарный месяц его первой оплаты. Пользователь удержан, если платил хотя бы раз в следующем календарном месяце.
Для каждой когорты верните cohort_month (первое число месяца), users, retained и retention_pct с одним знаком. Порядок по cohort_month.
В работе: Еженедельный отчёт по удержанию подписчиков после первого месяца.
Таблицы
payments — одна строка — одно списание
| Колонка | Тип | Что значит |
|---|---|---|
payment_id | int | ключ |
user_id | int | пользователь |
paid_at | timestamp | время списания |
amount_rub | numeric | сумма, ₽ |
Пример: данные
payments · 9 строк
| payment_id | user_id | paid_at | amount_rub |
|---|---|---|---|
| 1 | 1 | 2026-01-05T10:00:00 | 399 |
| 2 | 1 | 2026-02-05T10:00:00 | 399 |
| 3 | 2 | 2026-01-20T12:00:00 | 399 |
| 4 | 3 | 2026-01-31T23:00:00 | 399 |
| 5 | 3 | 2026-02-28T23:00:00 | 399 |
| 6 | 4 | 2026-02-10T09:00:00 | 399 |
| 7 | 4 | 2026-03-10T09:00:00 | 399 |
| 8 | 5 | 2026-02-14T18:00:00 | 399 |
| 9 | 2 | 2026-03-20T12:00:00 | 399 |
Ожидаемый ответ
| cohort_month | users | retained | retention_pct |
|---|---|---|---|
| 2026-01-01 | 3 | 2 | 66,7 |
| 2026-02-01 | 2 | 1 | 50 |
Как проверяем
Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 5 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один
SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
cohort_month, users, retained, retention_pct
Источник: на данных подписки Плюс: оплаты. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
Стр. 1Ctrl+Enter — запуск · Ctrl+Shift+Enter — отправка
Посмотреть данные, проверить кусок запроса. На зачёт не влияет.
Здесь появится результат отправки.