Sobes.tech
Junior

Rapporto per l'azienda logistica Sei un analista di un'azienda logistica che tiene traccia delle operazioni nei magazzini. Devi preparare un rapporto sull'efficienza di ogni magazzino. Per ogni magazzino, calcola: • il numero totale di operazioni (count_operations); • il numero totale di prodotti elaborati nel magazzino (sum_quantity); • il tempo medio di elaborazione di un'operazione (avg_processing_time), considerando solo le operazioni con un tempo specificato (non NULL), arrotondato al numero intero più vicino; • il massimo e minimo numero di prodotti elaborati in una singola operazione (max_quantity, min_quantity); • il numero di operazioni di ogni tipo («fornitura», «spedizione», «trasferimento») in colonne separate: supply_operations, shipment_operations, transfer_operations. Filtra i magazzini con un numero totale di operazioni superiore a 2 e un tempo medio di elaborazione non superiore a 60 minuti. Ordina il risultato per ID magazzino in ordine crescente. Formato di input Tabella operations: • operation_id (int) — identificatore unico dell'operazione • warehouse_id (int) — ID del magazzino • operation_type (text) — tipo di operazione: «fornitura», «spedizione», «trasferimento» • quantity (int) — numero di unità del prodotto nell'operazione • operation_date (timestamp) — data e ora dell'operazione • processing_time (int) — tempo di elaborazione dell'operazione La colonna processing_time può contenere valori nulli. Formato di output La query deve restituire una tabella con i campi nell'ordine seguente: • warehouse_id (int) — ID unico del magazzino • count_operations (int) — numero totale di operazioni effettuate nel magazzino • sum_quantity (int) — numero totale di prodotti elaborati nel magazzino • avg_processing_time (numeric) — tempo medio di elaborazione dell'operazione (in minuti), considerando solo le operazioni con tempo non nullo, arrotondato al numero intero più vicino • max_quantity (int) — numero massimo di prodotti elaborati in una singola operazione • min_quantity (int) — numero minimo di prodotti elaborati in una singola operazione • supply_operations (int) — numero di operazioni di tipo «fornitura» • shipment_operations (int) — numero di operazioni di tipo «spedizione» • transfer_operations (int) — numero di operazioni di tipo «trasferimento»

sobes.tech AI

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