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