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