Junior
Informe para la empresa logística Eres un analista de una empresa logística que lleva el registro de operaciones en los almacenes. Necesitas elaborar un informe sobre la eficiencia de cada almacén. Para cada almacén, calcula: • cantidad total de operaciones (count_operations); • cantidad total de productos procesados en el almacén (sum_quantity); • tiempo medio de procesamiento de la operación (avg_processing_time), considerando solo operaciones con tiempo especificado (no NULL), redondeado al número entero más cercano; • cantidad máxima y mínima de productos procesados en una sola operación (max_quantity, min_quantity); • cantidad de operaciones de cada tipo («entrega», «envío», «traslado») en columnas separadas: supply_operations, shipment_operations, transfer_operations. Filtra los almacenes cuya cantidad total de operaciones sea mayor a 2 y el tiempo medio de procesamiento no supere los 60 minutos. Ordena el resultado por ID del almacén en orden ascendente. Formato de entrada Tabla operations: • operation_id (int) — identificador único de la operación • warehouse_id (int) — identificador del almacén • operation_type (text) — tipo de operación: «entrega», «envío», «traslado» • quantity (int) — cantidad de unidades del producto en la operación • operation_date (timestamp) — fecha y hora de la operación • processing_time (int) — tiempo de procesamiento de la operación La columna processing_time puede contener valores nulos. Formato de salida La consulta debe devolver una tabla con los campos en el siguiente orden: • warehouse_id (int) — identificador único del almacén • count_operations (int) — cantidad total de operaciones realizadas en el almacén • sum_quantity (int) — cantidad total de productos procesados en el almacén • avg_processing_time (numeric) — tiempo medio de procesamiento de la operación (en minutos), considerando solo operaciones con tiempo no nulo, redondeado al entero más cercano • max_quantity (int) — cantidad máxima de productos procesados en una sola operación • min_quantity (int) — cantidad mínima de productos procesados en una sola operación • supply_operations (int) — cantidad de operaciones de tipo «entrega» • shipment_operations (int) — cantidad de operaciones de tipo «envío» • transfer_operations (int) — cantidad de operaciones de tipo «traslado»
sobes.tech AI
Respuesta de la IA
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 значения, поэтому не нужно дополнительной фильтрации.