SQL: Расчёт состава изделия рекурсивным запросом — Полная потребность в узлах и общих деталях
Практическая задача по SQL на тему «Расчёт состава изделия рекурсивным запросом». В условии приведены схема таблиц, ограничения данных, имена столбцов результата и порядок сортировки. Напишите один SELECT или WITH-запрос для SQLite. Перед проверкой продумайте пустой результат, повторяющиеся строки и границы диапазонов, если они встречаются в условии. Проверяется результат запроса, поэтому допустима эквивалентная реализация. Сначала решите задачу самостоятельно; продолжение практики доступно в полном курсе продвинутого SQL.
Полная потребность в узлах и общих деталях
Что уже дано
Таблица bom(parent_id INTEGER NOT NULL, child_id INTEGER NOT NULL, quantity INTEGER NOT NULL, PRIMARY KEY(parent_id,child_id)). Не более 8 различных ID — положительных целых до 1000000. quantity — целое от 1 до 20 на одну единицу родителя. Циклы и самопетли допустимы; одинаковые пары рёбер не повторяются. Изделие 100 является заданным стартом даже без исходящих связей.
Что нужно сделать
Рассчитайте суммарную потребность во всех узлах и деталях для выпуска 5 единиц изделия 100. Каждый путь перемножает число изделий и нормы связей. При появлении уже посещённого ID не продолжайте этот переход; разные простые пути к общей детали учитывайте отдельно. Верните по одной строке на каждого достигнутого потомка, включая промежуточные сборки. total_quantity — сумма потребностей по всем путям. Само изделие 100 не выводите.
Ввод и вывод
Отправьте один SELECT или WITH-запрос; stdin и печать не используются. Ровно 2 столбцов в указанном порядке и с этими именами: child_id, total_quantity. Оба столбца INTEGER; NULL нет. Сортировка: child_id ASC. Если у 100 нет достижимых потомков, результат пустой. В тестовых результатах разделитель |, NULL — пустое поле. Допускается любой эквивалентный запрос.
Пример
- Подготовка данных
INSERT INTO bom VALUES (100,10,2),(100,20,3),(10,1,4),(20,1,5),(20,3,2);
- Вывод
1|115 3|30 10|10 20|15
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- SQL: Агрегация, оконные вычисления и фильтрация — Категории-лидеры и доля в продажах
- SQL: SELF JOIN и поиск уникальных пар — Пары с несколькими общими проектами
- SQL: Календарная таблица и пропущенные даты — Непрерывный отчёт о звонках
- SQL: Объединение перекрывающихся интервалов — Объединённая занятость внутри отчётного окна
- SQL: Подсчёт одновременно активных интервалов — Максимальное число занятых столов
- SQL: EXPLAIN QUERY PLAN в SQLite — Сводка ошибок и их доля по сервисам
