Bill-of-materials развёртка

Сложная Рекурсивные запросы Wildberries-style

Условие задачи

Таблица components содержит parent_id, child_id, quantity. Корневой продукт — id=1. Посчитайте через рекурсивный CTE общее количество КАЖДОГО листового компонента (тех, у кого нет потомков), нужное для сборки 1 штуки корневого. Выведите component_id, total_quantity. Отсортируйте по component_id.

Схема данных

CREATE TABLE components (parent_id INTEGER, child_id INTEGER, quantity INTEGER);

Темы

WITH RECURSIVE JOIN GROUP BY

Подсказки

Что проверяет эта задача

Задача «Bill-of-materials развёртка» учит решать задачи по теме «Рекурсивные запросы» так, как это спрашивают на собеседовании аналитика данных. Такие задачи встречаются на собеседованиях в Wildberries-style и других IT-компаниях. Уровень сложный — задача проверяет глубину и умение собрать запрос из нескольких приёмов.

Как подступиться к решению

Сначала разберись со схемой данных и пойми, какой результат нужен на выходе. Определи, какие таблицы и поля задействованы, и собирай запрос пошагово: фильтрация → соединение или группировка → итоговый отбор и сортировка. Проверь результат на крайних случаях — NULL, дубликаты, пустые группы. Свой запрос сразу прогоняешь автопроверкой в интерактивной SQL-песочнице на реальной базе (SQLite и PostgreSQL 16 прямо в браузере).

Хочешь разобрать SQL системно с нуля — пройди бесплатный курс «SQL с нуля» и закрепи навык в тренажёре.

Решить в интерактивной SQL-песочнице → ← Все SQL-задачи