RFM-сегментация клиентов

Middle SQL E-commerce

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

**Контекст:** Реальный запрос от 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

Подсказки

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

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

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

Это задание для уровня Middle. Для middle-аналитиков с опытом 1-3 года, требует уверенного владения темой и понимания edge cases.

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

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

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

На реальном собеседовании на подобную задачу отводится 15-30 минут — оцениваются подход, корректность, обработка edge cases. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.

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

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

← Все задания