Sobes.tech
Junior

Rapport voor logistiek bedrijf Je bent analist bij een logistiek bedrijf dat de operaties in magazijnen bijhoudt. Je moet een rapport opstellen over de efficiëntie van elk magazijn. Voor elk magazijn bereken: • het totale aantal operaties (count_operations); • het totale aantal verwerkte goederen in het magazijn (sum_quantity); • de gemiddelde verwerkingstijd van een operatie (avg_processing_time), alleen rekening houdend met operaties met een gespecificeerde tijd (niet NULL), afgerond op het dichtstbijzijnde gehele getal; • het maximale en minimale aantal goederen verwerkt in één operatie (max_quantity, min_quantity); • het aantal operaties van elk type («levering», «verzending», «transfers») in aparte kolommen: supply_operations, shipment_operations, transfer_operations. Filter de magazijnen waarvan het totale aantal operaties meer dan 2 is en de gemiddelde verwerkingstijd niet meer dan 60 minuten. Sorteer het resultaat op ID van het magazijn in oplopende volgorde. Invoerformaat Tabel operations: • operation_id (int) — uniek identificatienummer van de operatie • warehouse_id (int) — ID van het magazijn • operation_type (text) — type operatie: «levering», «verzending», «transfers» • quantity (int) — aantal eenheden van het product in de operatie • operation_date (timestamp) — datum en tijd van de operatie • processing_time (int) — verwerkingstijd van de operatie De kolom processing_time kan NULL-waarden bevatten. Uitvoerformaat De query moet een tabel retourneren met de velden in de volgende volgorde: • warehouse_id (int) — uniek ID van het magazijn • count_operations (int) — totaal aantal operaties uitgevoerd in het magazijn • sum_quantity (int) — totaal aantal verwerkte producten in het magazijn • avg_processing_time (numeric) — gemiddelde verwerkingstijd van de operatie (in minuten), alleen rekening houdend met operaties met niet NULL tijd, afgerond op het dichtstbijzijnde gehele getal • max_quantity (int) — maximale hoeveelheid producten verwerkt in één operatie • min_quantity (int) — minimale hoeveelheid producten verwerkt in één operatie • supply_operations (int) — aantal operaties van het type «levering» • shipment_operations (int) — aantal operaties van het type «verzending» • transfer_operations (int) — aantal operaties van het type «transfers»

sobes.tech AI

Antwoord van AI

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