**Контекст:** Реальный запрос от CRM-маркетолога крупного онлайн-ритейлера. Нужно разбить клиентов на сегменты по **RFM-модели** — Recency (давность), Frequency (частота), Monetary (сумма).
**Данные:**
[см. код в задании]
Рассматриваем только `status = 'completed'`.
**Задание:**
1. Для каждого пользователя посчитать:
- `recency_days` — сколько дней прошло с последней покупки (от сегодня)
- `frequency` — число заказов за весь период
- `monetary` — сумма трат
2. Разбить юзеров на **квинтили** (5 корзин) по каждому измерению:
- R: **5** = самые свежие, **1** = давно не покупали
- F: **5** = чаще всего, **1** = редко
- M: **5** = больше всех тратят, **1** = мало
3. Присвоить «сегмент» по правилу:
- `R >= 4 AND F >= 4 AND M >= 4` → **"champions"** (топ-клиенты)
- `R >= 4 AND F <= 2` → **"new_customers"**
- `R <= 2 AND F >= 4` → **"at_risk"** (лояльные, но уходят)
- `R <= 2 AND F <= 2` → **"lost"**
- остальные → **"regular"**
**Ожидаемые колонки:** `user_id, R, F, M, segment`
Структура для ориентира — реальные значения из эталонного решения.
CREATE TABLE orders (
order_id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
order_date DATE NOT NULL,
amount NUMERIC(10,2) NOT NULL,
status VARCHAR(16) -- 'completed', 'cancelled', 'returned'
);
NTILE segmentation RFM CRM window-functions
Это задание для уровня Middle. Для middle-аналитиков с опытом 1-3 года, требует уверенного владения темой и понимания edge cases.
Подобные задания в категории «SQL» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: NTILE, segmentation, RFM, CRM, window-functions.
На реальном собеседовании на подобную задачу отводится 15-30 минут — оцениваются подход, корректность, обработка edge cases. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть 520+ SQL задач в песочнице с автопроверкой кода, конспекты SQL для аналитика, AI мок-собеседование с разбором ваших ответов.
← Все задания