**Контекст:** На маркетплейсе каталог товаров организован в дерево категорий произвольной глубины. Нужно агрегировать статистику по всему поддереву каждой корневой категории.
**Данные:**
[см. код в задании]
Пример дерева:
- Электроника (id=1)
- Смартфоны (id=10, parent=1)
- Apple (id=100, parent=10)
- Samsung (id=101, parent=10)
- Ноутбуки (id=11, parent=1)
**Задание:**
Для **каждой корневой категории** (`parent_id IS NULL`) выведите:
1. Название корневой категории
2. Общее количество **всех** подкатегорий на всех уровнях вложенности
3. Количество активных товаров во **всех** подкатегориях (включая саму корневую)
4. Среднюю цену активных товаров
Структура для ориентира — реальные значения из эталонного решения.
CREATE TABLE categories (
id INT PRIMARY KEY,
name VARCHAR(200) NOT NULL,
parent_id INT REFERENCES categories(id) -- NULL для корневых
);
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(300) NOT NULL,
category_id INT NOT NULL REFERENCES categories(id),
price NUMERIC(10,2) NOT NULL,
is_active BOOLEAN NOT NULL DEFAULT TRUE
);
рекурсивный CTE иерархия дерево WITH RECURSIVE
Это задание для уровня Senior. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.
Подобные задания в категории «SQL» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: рекурсивный CTE, иерархия, дерево, WITH RECURSIVE.
На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть 425 SQL задач в песочнице с автопроверкой кода, конспекты SQL для аналитика, AI мок-собеседование с разбором ваших ответов.
← Все задания