**Контекст.** Вы аналитик в B2B SaaS с помесячной подпиской. Финансовый директор просит объяснить, из чего сложилось изменение MRR (Monthly Recurring Revenue) между двумя соседними месяцами. Одной цифры «MRR вырос на 120 000 ₽» недостаточно — нужен MRR bridge: сколько принесли новые клиенты, сколько добавили расширения, сколько потеряли на даунгрейдах и оттоке.
**Дано.** Таблица `subscriptions_monthly` — по одной строке на активную подписку в каждом месяце (снимок на 1-е число). Если клиент в месяце отсутствует — подписка неактивна (churn/ещё не пришёл).
| колонка | тип | описание |
|---|---|---|
| `customer_id` | int | идентификатор клиента |
| `month` | date | первое число месяца (снимок) |
| `mrr` | numeric | помесячная выручка клиента в этом месяце, ₽ |
Пример данных:
[см. код в задании]
**Задание.** Сравнивая февраль 2024 с январём 2024, посчитайте компоненты MRR bridge:
1. `new_mrr` — выручка клиентов, которых не было в январе, но появились в феврале.
2. `expansion_mrr` — прирост по клиентам, которые были в обоих месяцах и увеличили MRR.
3. `contraction_mrr` — снижение по клиентам, которые были в обоих месяцах и уменьшили MRR (со знаком минус).
4. `churned_mrr` — выручка клиентов, которые были в январе, но пропали в феврале (со знаком минус).
5. Проверьте тождество: `MRR_feb - MRR_jan = new + expansion + contraction + churned`.
**Формат ответа:** одна строка с колонками `mrr_start`, `new_mrr`, `expansion_mrr`, `contraction_mrr`, `churned_mrr`, `mrr_end`.
Структура для ориентира — реальные значения из эталонного решения.
CREATE TABLE subscriptions_monthly (
customer_id INT,
month DATE,
mrr NUMERIC
);
INSERT INTO subscriptions_monthly (customer_id, month, mrr) VALUES
(1, '2024-01-01', 1000), (1, '2024-02-01', 1000), -- без изменений
(2, '2024-01-01', 2000), (2, '2024-02-01', 3000), -- expansion
(3, '2024-01-01', 1500), (3, '2024-02-01', 900), -- contraction
(4, '2024-01-01', 800), -- churned в феврале
(5, '2024-02-01', 1200), -- new в феврале
(6, '2024-01-01', 2000), (6, '2024-02-01', 2000); -- без изменений
MRR revenue bridge SQL window functions SaaS-метрики
Это задание для уровня hard. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.
Подобные задания в категории «Метрики» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: MRR, revenue bridge, SQL, window functions, SaaS-метрики.
На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть другие задания в категории «Метрики», продуктовые кейсы, справочник метрик, AI мок-собеседование с разбором ваших ответов.
← Все задания