Junior
Raport pentru compania logistică Ești un analist al unei companii logistice care ține evidența operațiunilor din depozite. Trebuie să întocmești un raport despre eficiența fiecărui depozit. Pentru fiecare depozit, calculează: • numărul total de operațiuni (count_operations); • numărul total de produse procesate în depozit (sum_quantity); • timpul mediu de procesare a unei operațiuni (avg_processing_time), luând în considerare doar operațiunile cu timp specificat (nu NULL), rotunjit la cel mai apropiat număr întreg; • numărul maxim și minim de produse procesate într-o singură operațiune (max_quantity, min_quantity); • numărul de operațiuni de fiecare tip («livrare», «expediere», «transfer») în coloane separate: supply_operations, shipment_operations, transfer_operations. Filtrează depozitele a căror număr total de operațiuni este mai mare de 2 și timpul mediu de procesare nu depășește 60 de minute. Ordonează rezultatul după ID-ul depozitului în ordine crescătoare. Formatul de intrare Tabelul operations: • operation_id (int) — identificator unic al operației • warehouse_id (int) — ID-ul depozitului • operation_type (text) — tipul operației: «livrare», «expediere», «transfer» • quantity (int) — numărul de unități ale produsului în operație • operation_date (timestamp) — data și ora operației • processing_time (int) — timpul de procesare al operației Coloana processing_time poate conține valori nule. Formatul de ieșire Interogarea trebuie să returneze un tabel cu câmpurile în următoarea ordine: • warehouse_id (int) — ID-ul unic al depozitului • count_operations (int) — numărul total de operațiuni efectuate în depozit • sum_quantity (int) — numărul total de produse procesate în depozit • avg_processing_time (numeric) — timpul mediu de procesare a operației (în minute), luând în considerare doar operațiunile cu timp nenul, rotunjit la cel mai apropiat număr întreg • max_quantity (int) — numărul maxim de produse procesate într-o singură operațiune • min_quantity (int) — numărul minim de produse procesate într-o singură operațiune • supply_operations (int) — numărul de operațiuni de tip «livrare» • shipment_operations (int) — numărul de operațiuni de tip «expediere» • transfer_operations (int) — numărul de operațiuni de tip «transfer»
sobes.tech AI
Răspuns de la 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 значения, поэтому не нужно дополнительной фильтрации.