Работа вам нужна срочно. Не волнуйтесь, уложимся!
- 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.
Нужна версия с учетом этого?