Назад к вопросам
Junior
8
Отчет для логистической компании Вы аналитик логистической компании, которая ведет учет операций на складах. Вам необходимо составить отчет по эффективности работы каждого склада. Для каждого склада рассчитайте: • общее количество операций (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) — количество операций типа «перемещение»
Компании, где спрашивали
01.tech
Ответ от нейросети
sobes.tech 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 значения, поэтому не нужно дополнительной фильтрации.