Sobes.tech
Junior

Správa pre logistickú spoločnosť Ste analytik v logistickej spoločnosti, ktorá zaznamenáva operácie na skladoch. Musíte vypracovať správu o efektívnosti každého skladu. Pre každý sklad vypočítajte: • celkový počet operácií (count_operations); • celkový počet spracovaných tovarov na sklade (sum_quantity); • priemerný čas spracovania operácie (avg_processing_time), pričom sa berú do úvahy iba operácie s uvedeným časom (nie NULL), zaokrúhlený na celé číslo; • maximálny a minimálny počet tovarov spracovaných v jednej operácii (max_quantity, min_quantity); • počet operácií každého typu («dodávka», «odoslanie», «presun») v samostatných stĺpcoch: supply_operations, shipment_operations, transfer_operations. Filtrovať sklady, ktorých celkový počet operácií je viac ako 2 a priemerný čas spracovania nepresahuje 60 minút. Usporiadať výsledok podľa ID skladu vzostupne. Formát vstupu Tabuľka operations: • operation_id (int) — jedinečný identifikátor operácie • warehouse_id (int) — ID skladu • operation_type (text) — typ operácie: «dodaní», «odoslaní», «presun» • quantity (int) — počet jednotiek tovaru v operácii • operation_date (timestamp) — dátum a čas operácie • processing_time (int) — čas spracovania operácie Stĺpec processing_time môže obsahovať hodnoty NULL. Formát výstupu Dotaz by mal vrátiť tabuľku s poľami v nasledovnom poradí: • warehouse_id (int) — jedinečný ID skladu • count_operations (int) — celkový počet operácií vykonaných v sklade • sum_quantity (int) — celkový počet spracovaných tovarov v sklade • avg_processing_time (numeric) — priemerný čas spracovania operácie (v minútach), pričom sa berú do úvahy iba operácie s nenulovým časom, zaokrúhlené na celé číslo • max_quantity (int) — maximálny počet tovarov spracovaných v jednej operácii • min_quantity (int) — minimálny počet tovarov spracovaných v jednej operácii • supply_operations (int) — počet operácií typu «dodaní» • shipment_operations (int) — počet operácií typu «odoslaní» • transfer_operations (int) — počet operácií typu «presun»

sobes.tech AI

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