Sobes.tech
Junior
33

Bericht für das Logistikunternehmen Sie sind Analyst bei einem Logistikunternehmen, das die Operationen in den Lagern erfasst. Sie müssen einen Bericht über die Effizienz jedes Lagers erstellen. Berechnen Sie für jedes Lager: • die Gesamtzahl der Operationen (count_operations); • die Gesamtzahl der im Lager verarbeiteten Waren (sum_quantity); • die durchschnittliche Bearbeitungszeit der Operation (avg_processing_time), nur für Operationen mit einer angegebenen Zeit (nicht NULL), auf die nächste ganze Zahl gerundet; • die maximale und minimale Anzahl der in einer Operation verarbeiteten Waren (max_quantity, min_quantity); • die Anzahl der Operationen jedes Typs («Lieferung», «Versand», «Transfer») in separaten Spalten: supply_operations, shipment_operations, transfer_operations. Filtern Sie die Lager, bei denen die Gesamtzahl der Operationen mehr als 2 beträgt und die durchschnittliche Bearbeitungszeit 60 Minuten nicht übersteigt. Sortieren Sie das Ergebnis nach Lager-ID aufsteigend. Eingabeformat Tabelle operations: • operation_id (int) — eindeutiger Bezeichner der Operation • warehouse_id (int) — Lager-ID • operation_type (text) — Operationstyp: «Lieferung», «Versand», «Transfer» • quantity (int) — Anzahl der Waren in der Operation • operation_date (timestamp) — Datum und Uhrzeit der Operation • processing_time (int) — Bearbeitungszeit der Operation Die Spalte processing_time kann NULL-Werte enthalten. Ausgabeformat Die Abfrage sollte eine Tabelle mit den Feldern in folgender Reihenfolge zurückgeben: • warehouse_id (int) — eindeutiger Lager-ID • count_operations (int) — Gesamtzahl der Operationen im Lager • sum_quantity (int) — Gesamtzahl der verarbeiteten Waren im Lager • avg_processing_time (numeric) — durchschnittliche Bearbeitungszeit der Operation (in Minuten), nur für Operationen mit nicht NULL Zeit, auf die nächste ganze Zahl gerundet • max_quantity (int) — maximale Anzahl der in einer Operation verarbeiteten Waren • min_quantity (int) — minimale Anzahl der in einer Operation verarbeiteten Waren • supply_operations (int) — Anzahl der Operationen vom Typ «Lieferung» • shipment_operations (int) — Anzahl der Operationen vom Typ «Versand» • transfer_operations (int) — Anzahl der Operationen vom Typ «Transfer»

Unternehmen wurden gefragt
01.tech

Antwort von AI

sobes.tech KI

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 значения, поэтому не нужно дополнительной фильтрации.