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) — ідэнтыфікатар склада • operation_type (text) — тып аперацыі: «пастаўка», «адгрузка», «перамяшчэнне» • quantity (int) — колькасць адзінак тавару ў аперацыі • operation_date (timestamp) — дата і час аперацыі • processing_time (int) — час апрацоўкі аперацыі Калонка processing_time можа ўтрымліваць пропускі. Фармат вываду Запыт павінен вярнуць табліцу з палямі ў такім парадку: • warehouse_id (int) — унікальны ідэнтыфікатар склада • count_operations (int) — агульная колькасць аперацый, выкананых на складзе • sum_quantity (int) — агульная колькасць тавараў, апрацаваных на складзе • avg_processing_time (numeric) — сярэдні час апрацоўкі аперацыі (у мінутах), улічваючы толькі аперацыі з не NULL часам, заакруглены да цэлага ліку • max_quantity (int) — максімальная колькасць тавараў, апрацаваных у адной аперацыі • min_quantity (int) — мінімальная колькасць тавараў, апрацаваных у адной аперацыі • supply_operations (int) — колькасць аперацый тыпу «пастаўка» • shipment_operations (int) — колькасць аперацый тыпу «адгрузка» • transfer_operations (int) — колькасць аперацый тыпу «перамяшчэнне»
sobes.tech AI
Պատասխան 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 значения, поэтому не нужно дополнительной фильтрации.