Найти клиентов с аномальным ростом заказов месяц к месяцу

medium SQL E-commerce

Условие задания

## Контекст

Вы аналитик в интернет-магазине. Отдел антифрода просит найти клиентов, у которых число заказов резко выросло от месяца к месяцу — это может быть как всплеск лояльности (кандидаты в VIP), так и подозрительная активность (перепродажа, накрутка бонусов).

## Данные

Таблица `orders`:

| Колонка | Тип | Описание |
|---|---|---|
| `order_id` | BIGINT | ID заказа (PK) |
| `customer_id` | BIGINT | ID клиента |
| `order_date` | DATE | Дата заказа |
| `amount` | NUMERIC(10,2) | Сумма заказа, руб |
| `status` | TEXT | `paid`, `cancelled`, `refunded` |

## Задание

1. Учитывайте только оплаченные заказы (`status = 'paid'`).
2. Для каждого клиента посчитайте число заказов **по месяцам**.
3. Для каждого месяца сравните с **предыдущим месяцем этого же клиента**.
4. Выведите пары (клиент, месяц), где число заказов выросло **минимум в 3 раза** относительно предыдущего месяца, при этом в предыдущем месяце было **не меньше 2 заказов** (чтобы отсечь рост с 1 до 3).

**Формат ответа:** `customer_id`, `month` (первое число месяца), `orders_prev`, `orders_curr`, `growth_ratio` (округлить до 2 знаков). Отсортировать по `growth_ratio` убыванию.

## Замечание

Месяцы, в которых у клиента вообще не было заказов, в данных отсутствуют — соседние по хронологии строки могут быть не соседними по календарю. Считайте «предыдущим месяцем» предыдущую строку клиента в его истории заказов.

Темы

window functions LAG self-join агрегация CTE

Подсказки

Все тестовые задания →

Частые вопросы

Какой уровень знаний нужен для задачи "Найти клиентов с аномальным ростом заказов месяц к месяцу"?

Это задание для уровня medium. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.

На каких собеседованиях встречается такая задача?

Подобные задания в категории «SQL» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: window functions, LAG, self-join, агрегация, CTE.

Сколько времени даётся на решение?

На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.

Где ещё потренироваться по теме «SQL»?

На zasqlpython.ru есть 520+ SQL задач в песочнице с автопроверкой кода, конспекты SQL для аналитика, AI мок-собеседование с разбором ваших ответов.

← Все задания