Sobes.tech
Junior

Извештај за логистичку компанију Ви сте аналитичар у логистичкој компанији која води евиденцију о операцијама у складиштима. Морате припремити извештај о ефикасности сваког складишта. За сваки магацин израчунати: • укупни број операција (count_operations); • укупни број обрађених роба у магацину (sum_quantity); • просечно време обраде операције (avg_processing_time), узимајући у обзир само операције са наведеним временом (не NULL), заокружено на најближи цео број; • максимални и минимални број роба обрађених у једној операцији (max_quantity, min_quantity); • број операција сваког типа («доставка», «испорука», «пренос») у посебним колонама: supply_operations, shipment_operations, transfer_operations. Филтрирајте магацине који имају укупно више од 2 операције и просечно време обраде не прелази 60 минута. Резултат сортирајте по ID-у магацина по растућем редоследу. Формат улаза Табела operations: • operation_id (int) — јединствени идентификатор операције • warehouse_id (int) — ID магацина • operation_type (text) — тип операције: «доставка», «испорука», «пренос» • quantity (int) — број јединица робе у операцији • operation_date (timestamp) — датум и време операције • processing_time (int) — време обраде операције Колона processing_time може садржати NULL вредности. Формат излаза Упит треба да врати табелу са пољима у следећем редоследу: • warehouse_id (int) — јединствени ID магацина • count_operations (int) — укупни број операција извршених у магацину • sum_quantity (int) — укупни број обрађених роба у магацину • avg_processing_time (numeric) — просечно време обраде операције (у минутима), узимајући у обзир само операције са непразним временом, заокружено на најближи цео број • max_quantity (int) — максимални број роба обрађених у једној операцији • min_quantity (int) — минимални број роба обрађених у једној операцији • supply_operations (int) — број операција типа «доставка» • shipment_operations (int) — број операција типа «испорука» • transfer_operations (int) — број операција типа «пренос»

sobes.tech АИ

Одговор од АИ

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