Sobes.tech
Junior

Relatório para a empresa logística És um analista de uma empresa logística que mantém registos de operações nos armazéns. Precisas de elaborar um relatório sobre a eficiência de cada armazém. Para cada armazém, calcula: • quantidade total de operações (count_operations); • quantidade total de produtos processados no armazém (sum_quantity); • tempo médio de processamento de operação (avg_processing_time), considerando apenas operações com tempo especificado (não NULL), arredondado ao número inteiro mais próximo; • quantidade máxima e mínima de produtos processados numa única operação (max_quantity, min_quantity); • quantidade de operações de cada tipo («entrega», «envio», «transferência») em colunas separadas: supply_operations, shipment_operations, transfer_operations. Filtra os armazéns cuja quantidade total de operações seja superior a 2 e o tempo médio de processamento não ultrapasse os 60 minutos. Ordena o resultado por ID do armazém em ordem crescente. Formato de entrada Tabela operations: • operation_id (int) — identificador único da operação • warehouse_id (int) — identificador do armazém • operation_type (text) — tipo de operação: «entrega», «envio», «transferência» • quantity (int) — quantidade de unidades do produto na operação • operation_date (timestamp) — data e hora da operação • processing_time (int) — tempo de processamento da operação A coluna processing_time pode conter valores nulos. Formato de saída A consulta deve devolver uma tabela com os campos na seguinte ordem: • warehouse_id (int) — identificador único do armazém • count_operations (int) — quantidade total de operações realizadas no armazém • sum_quantity (int) — quantidade total de produtos processados no armazém • avg_processing_time (numeric) — tempo médio de processamento da operação (em minutos), considerando apenas operações com tempo não nulo, arredondado ao inteiro mais próximo • max_quantity (int) — quantidade máxima de produtos processados em uma única operação • min_quantity (int) — quantidade mínima de produtos processados em uma única operação • supply_operations (int) — quantidade de operações de tipo «entrega» • shipment_operations (int) — quantidade de operações de tipo «envio» • transfer_operations (int) — quantidade de operações de tipo «transferência»

sobes.tech IA

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