Помесячная сводка платежей: пивот статусов и MoM-рост выручки

Сложная Пивот и даты / оконные функции T-Банк

Условие задачи

По таблице payments постройте помесячную сводку. Для каждого месяца (формат YYYY-MM по полю paid_at) выведите: month, число успешных платежей paid_cnt, число возвратов refunded_cnt, число неуспешных failed_cnt, сумму успешной выручки revenue (только по статусу paid) и прирост выручки к предыдущему месяцу в процентах mom_growth_pct, округлённый до 1 знака. Если в месяце какого-то статуса не было, в его колонке должен стоять 0, а не пропуск. Для самого первого месяца прирост — NULL. Отсортируйте по month по возрастанию.

Схема данных

CREATE TABLE payments (
  id INTEGER PRIMARY KEY,
  user_id INTEGER NOT NULL,
  amount INTEGER NOT NULL,
  status TEXT NOT NULL,
  paid_at TEXT NOT NULL
);

Темы

LAG MoM CASE strftime пивот

Подсказки

Что проверяет эта задача

Задача «Помесячная сводка платежей: пивот статусов и MoM-рост выручки» учит решать задачи по теме «Пивот и даты / оконные функции» так, как это спрашивают на собеседовании аналитика данных. Такие задачи встречаются на собеседованиях в T-Банк и других IT-компаниях. Уровень сложный — задача проверяет глубину и умение собрать запрос из нескольких приёмов.

Как подступиться к решению

Сначала разберись со схемой данных и пойми, какой результат нужен на выходе. Определи, какие таблицы и поля задействованы, и собирай запрос пошагово: фильтрация → соединение или группировка → итоговый отбор и сортировка. Проверь результат на крайних случаях — NULL, дубликаты, пустые группы. Свой запрос сразу прогоняешь автопроверкой в интерактивной SQL-песочнице на реальной базе (SQLite и PostgreSQL 16 прямо в браузере).

Хочешь разобрать SQL системно с нуля — пройди бесплатный курс «SQL с нуля» и закрепи навык в тренажёре.

Решить в интерактивной SQL-песочнице → ← Все SQL-задачи