Топ-3 продавца в каждой категории маркетплейса по выручке

medium SQL Маркетплейс

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

## Контекст

Вы работаете с данными маркетплейса (модель как у Ozon/Wildberries: много продавцов, много категорий). Категорийные менеджеры хотят видеть **топ-3 продавца по выручке внутри каждой товарной категории** за последний квартал, чтобы вести с ними переговоры об эксклюзивах.

## Данные

Таблица `order_items` (позиции в заказах):

| Колонка | Тип | Описание |
|---|---|---|
| `item_id` | BIGINT | ID позиции (PK) |
| `order_id` | BIGINT | ID заказа |
| `seller_id` | BIGINT | ID продавца |
| `category` | TEXT | Категория товара |
| `qty` | INT | Количество |
| `unit_price` | NUMERIC(10,2) | Цена за единицу |
| `sold_at` | TIMESTAMP | Момент продажи |

Таблица `sellers`:

| Колонка | Тип | Описание |
|---|---|---|
| `seller_id` | BIGINT | ID продавца (PK) |
| `seller_name` | TEXT | Название продавца |

## Задание

1. Возьмите продажи за **2-й квартал 2024** (`sold_at` с 2024-04-01 включительно по 2024-07-01 не включая).
2. Посчитайте выручку каждого продавца **внутри каждой категории** (выручка позиции = `qty * unit_price`).
3. Оставьте **топ-3 продавца по выручке в каждой категории**.
4. Выведите название категории, ранг (1..3), `seller_name`, выручку.

**Формат ответа:** `category`, `rank`, `seller_name`, `revenue`. Отсортировать по `category`, затем по `rank`.

## Уточнение

Если у двух продавцов одинаковая выручка, для стабильности разрывайте ничью по `seller_id` (меньший — выше). То есть в топе всегда ровно до 3 строк на категорию.

Темы

window functions ROW_NUMBER RANK partition ранжирование

Подсказки

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

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

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

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

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

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

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

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

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

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

← Все задания