Работа вам нужна срочно. Не волнуйтесь, уложимся!
- 22423 авторов готовы помочь тебе.
- 2402 онлайн
Хватит ли подарков на складе для всех доставок? Напишите запрос, который покажет разницу между доступным количеством подарков и требуемым для доставок в статусе "сборка". Сортируйте от меньшего к большему.
Предмет: Базы данных
Раздел: SQL-запросы, агрегация, соединения (JOIN), фильтрация данных
Нужно определить, хватает ли подарков на складе для всех доставок, находящихся в статусе "сборка".
Для этого необходимо:
deliveries
содержит статус доставки и warehouse_id
, где находится подарок.letters
указывает, какой подарок (gift_id
) требуется.stocks
показывает, сколько подарков есть на складе (warehouse_id
, gift_id
, quantity
).SELECT
s.warehouse_id,
s.gift_id,
COALESCE(s.quantity, 0) AS available_quantity,
COALESCE(r.required_quantity, 0) AS required_quantity,
COALESCE(s.quantity, 0) - COALESCE(r.required_quantity, 0) AS difference
FROM stocks s
LEFT JOIN (
SELECT
d.warehouse_id,
l.gift_id,
COUNT(*) AS required_quantity
FROM deliveries d
JOIN letters l ON d.letter_id = l.letter_id
WHERE d.delivery_status = 'сборка'
GROUP BY d.warehouse_id, l.gift_id
) r ON s.warehouse_id = r.warehouse_id AND s.gift_id = r.gift_id
ORDER BY difference ASC;
r
мы считаем, сколько подарков требуется на каждом складе, фильтруя по статусу сборка
.stocks
с этим подзапросом по складу и подарку.COALESCE
, чтобы заменить NULL
на 0 (если нет записей в одной из таблиц).warehouse_id | gift_id | available_quantity | required_quantity | difference |
---|---|---|---|---|
2 | 101 | 5 | 10 | -5 |
1 | 102 | 8 | 8 | 0 |
3 | 103 | 15 | 10 | 5 |
Если в таблице stocks
отсутствует комбинация warehouse_id
и gift_id
, которая есть в deliveries
, то такие случаи можно также включить, используя FULL OUTER JOIN (если поддерживается), либо объединить с подзапросом через UNION
.
Нужна версия с учетом этого?