Sobes.tech
Junior

Logisztikai vállalat jelentése Ön egy logisztikai vállalat elemzője, aki a raktárak műveleteit nyilvántartja. Jelentést kell készítenie minden raktár hatékonyságáról. Minden raktár esetében számolja ki: • a műveletek összes száma (count_operations); • a raktárban feldolgozott termékek összes száma (sum_quantity); • az átlagos feldolgozási idő (avg_processing_time), csak a megadott idővel (nem NULL) rendelkező műveleteket figyelembe véve, a legközelebbi egész számra kerekítve; • a maximális és minimális termékszám, amit egy műveletben feldolgoztak (max_quantity, min_quantity); • az egyes típusú műveletek száma («beszállítás», «kiszállítás», «átvitel») külön oszlopokban: supply_operations, shipment_operations, transfer_operations. Szűrje ki azokat a raktárakat, ahol az összes művelet száma több mint 2, és az átlagos feldolgozási idő nem haladja meg a 60 percet. Rendezze az eredményt a raktár azonosítója szerint növekvő sorrendben. Bemeneti formátum operations tábla: • operation_id (int) — művelet azonosítója • warehouse_id (int) — raktár azonosítója • operation_type (text) — művelet típusa: «beszállítás», «kiszállítás», «átvitel» • quantity (int) — a műveletben lévő termékek száma • operation_date (timestamp) — a művelet dátuma és időpontja • processing_time (int) — a művelet feldolgozási ideje A processing_time oszlop NULL értékeket tartalmazhat. Kimeneti formátum A lekérdezésnek egy olyan táblát kell visszaadnia, amely a következő mezőket tartalmazza a megadott sorrendben: • warehouse_id (int) — raktár egyedi azonosítója • count_operations (int) — a raktárban végrehajtott összes művelet száma • sum_quantity (int) — a raktárban feldolgozott összes termék száma • avg_processing_time (numeric) — a művelet átlagos feldolgozási ideje (percben), csak a nem NULL idővel rendelkező műveleteket figyelembe véve, a legközelebbi egészre kerekítve • max_quantity (int) — egy műveletben feldolgozott maximális termékszám • min_quantity (int) — egy műveletben feldolgozott minimális termékszám • supply_operations (int) — «beszállítás» típusú műveletek száma • shipment_operations (int) — «kiszállítás» típusú műveletek száma • transfer_operations (int) — «átvitel» típusú műveletek száma

sobes.tech MI

Válasz az MI-től

sql SELECT warehouse_id, COUNT() AS count_operations, SUM(quantity) AS sum_quantity, ROUND(AVG(processing_time)) AS avg_processing_time, MAX(quantity) AS max_quantity, MIN(quantity) AS min_quantity, SUM(CASE WHEN operation_type = 'поставка' THEN 1 ELSE 0 END) AS supply_operations, SUM(CASE WHEN operation_type = 'отгрузка' THEN 1 ELSE 0 END) AS shipment_operations, SUM(CASE WHEN operation_type = 'перемещение' THEN 1 ELSE 0 END) AS transfer_operations FROM operations WHERE warehouse_id IS NOT NULL GROUP BY warehouse_id HAVING COUNT() > 2 AND (AVG(processing_time) <= 60 OR AVG(processing_time) IS NULL) ORDER BY warehouse_id ASC;


**Пояснения:**
- `COUNT(*)` считает все операции на складе.
- `SUM(quantity)` суммирует количество товаров.
- `AVG(processing_time)` считает среднее время обработки, игнорируя NULL.
- `ROUND` округляет среднее время до целого.
- `MAX` и `MIN` находят максимальное и минимальное количество товаров в одной операции.
- `SUM(CASE WHEN ...)` считает количество операций каждого типа.
- Фильтрация по количеству операций и среднему времени обработки в `HAVING`.
- Сортировка по `warehouse_id` по возрастанию.

Обратите внимание, что `AVG(processing_time)` автоматически игнорирует NULL значения, поэтому не нужно дополнительной фильтрации.