**Контекст:** Платёжная система ищет контрагентов для премиальной программы. Критерии: высокий оборот, диверсификация клиентской базы, достаточный масштаб.
**Данные:**
[см. код в задании]
**Задание — найдите контракты, удовлетворяющие ВСЕМ условиям:**
1. Среднемесячный оборот (за последние 12 месяцев) ≥ 50 000 ₽
2. Ни один клиент не генерирует более 60% от общего оборота контракта
3. Исключить агентства (contract_type = 'agency') с менее чем 10 клиентами
4. Выведите contract_id, общий оборот, среднемесячный оборот, макс. долю клиента
Структура для ориентира — реальные значения из эталонного решения.
CREATE TABLE contracts (
id SERIAL PRIMARY KEY,
contract_id VARCHAR(50) NOT NULL,
contract_type VARCHAR(20) NOT NULL, -- 'agency', 'direct'
client_count INT NOT NULL -- количество клиентов у контрагента
);
CREATE TABLE transactions (
id SERIAL PRIMARY KEY,
contract_id VARCHAR(50) NOT NULL,
client_id INT NOT NULL,
amount NUMERIC(12,2) NOT NULL,
tx_date DATE NOT NULL
);
HAVING подзапросы агрегация бизнес-логика
Это задание для уровня Senior. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.
Подобные задания в категории «SQL» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: HAVING, подзапросы, агрегация, бизнес-логика.
На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть 425 SQL задач в песочнице с автопроверкой кода, конспекты SQL для аналитика, AI мок-собеседование с разбором ваших ответов.
← Все задания