**Контекст:** Задание по мотивам реального тестового в Ozon. Финансовый аналитик проверяет контракты агентств на соответствие трём критериям для продления.
**Данные:**
[см. код в задании]
**Задание:**
Найдите контракты, которые одновременно удовлетворяют ВСЕМ трём условиям:
1. **Минимальный оборот:** продажи за предыдущий месяц (январь 2025) ≥ 50 000
2. **Диверсификация:** ни один клиент не даёт более 60% от общих продаж контракта за весь период
3. **Масштаб:** у агентства не менее 10 уникальных клиентов по данному контракту
Выведите contract_id, agency_id, jan_sales, max_client_share, unique_clients
Структура для ориентира — реальные значения из эталонного решения.
CREATE TABLE sales (
id SERIAL PRIMARY KEY,
dt DATE NOT NULL,
amt NUMERIC(12,2) NOT NULL,
client_id INT NOT NULL,
agency_id INT NOT NULL,
contract_id INT NOT NULL
);
INSERT INTO sales (dt, amt, client_id, agency_id, contract_id) VALUES
-- Агентство 1, контракт 501 (январь: 62k, февраль: разные клиенты, 12 уникальных клиентов)
('2025-01-05', 8000, 1, 1, 501), ('2025-01-10', 7000, 2, 1, 501),
('2025-01-15', 9000, 3, 1, 501), ('2025-01-20', 6000, 4, 1, 501),
('2025-01-25', 8500, 5, 1, 501), ('2025-01-28', 5500, 6, 1, 501),
('2025-01-30', 9000, 7, 1, 501), ('2025-01-31', 9000, 8, 1, 501),
('2025-02-05', 7000, 1, 1, 501), ('2025-02-10', 8000, 9, 1, 501),
('2025-02-15', 6500, 10, 1, 501), ('2025-02-20', 7500, 11, 1, 501),
('2025-02-25', 5000, 12, 1, 501), ('2025-02-28', 6000, 2, 1, 501),
-- Агентство 2, контракт 502 (январь: 55k, один клиент > 60%)
('2025-01-05', 35000, 20, 2, 502), ('2025-01-15', 10000, 21, 2, 502),
('2025-01-25', 10000, 22, 2, 502),
('2025-02-05', 8000, 20, 2, 502), ('2025-02-15', 7000, 23, 2, 502),
-- Агентство 3, контракт 503 (6 клиентов — меньше 10)
('2025-01-10', 12000, 30, 3, 503), ('2025-01-20', 11000, 31, 3, 503),
('2025-01-28', 13000, 32, 3, 503),
('2025-02-05', 9000, 33, 3, 503), ('2025-02-15', 10000, 34, 3, 503),
('2025-02-25', 8000, 35, 3, 503);
CTE HAVING подзапросы множественные условия агрегация
Это задание для уровня Senior. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.
Подобные задания в категории «SQL» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: CTE, HAVING, подзапросы, множественные условия, агрегация.
На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть 425 SQL задач в песочнице с автопроверкой кода, конспекты SQL для аналитика, AI мок-собеседование с разбором ваших ответов.
← Все задания