Junior
Raport dla firmy logistycznej Jesteś analitykiem w firmie logistycznej, która prowadzi rejestr operacji w magazynach. Musisz przygotować raport dotyczący efektywności każdego magazynu. Dla każdego magazynu oblicz: • łączną liczbę operacji (count_operations); • łączną liczbę przetworzonych towarów w magazynie (sum_quantity); • średni czas przetwarzania operacji (avg_processing_time), uwzględniając tylko operacje z określonym czasem (nie NULL), zaokrąglony do najbliższej liczby całkowitej; • maksymalną i minimalną liczbę towarów przetworzonych w jednej operacji (max_quantity, min_quantity); • liczbę operacji każdego typu («dostawa», «wysyłka», «transfer») w osobnych kolumnach: supply_operations, shipment_operations, transfer_operations. Filtruj magazyny, dla których łączna liczba operacji jest większa niż 2, a średni czas przetwarzania nie przekracza 60 minut. Posortuj wynik według ID magazynu rosnąco. Format wejścia Tabela operations: • operation_id (int) — unikalny identyfikator operacji • warehouse_id (int) — ID magazynu • operation_type (text) — typ operacji: «dostawa», «wysyłka», «transfer» • quantity (int) — liczba jednostek towaru w operacji • operation_date (timestamp) — data i czas operacji • processing_time (int) — czas przetwarzania operacji Kolumna processing_time może zawierać wartości NULL. Format wyjścia Zapytanie powinno zwrócić tabelę z polami w takiej kolejności: • warehouse_id (int) — unikalny identyfikator magazynu • count_operations (int) — łączna liczba operacji wykonanych w magazynie • sum_quantity (int) — łączna liczba przetworzonych towarów w magazynie • avg_processing_time (numeric) — średni czas przetwarzania operacji (w minutach), uwzględniając tylko operacje z nie NULL czasem, zaokrąglony do najbliższej liczby całkowitej • max_quantity (int) — maksymalna liczba towarów przetworzonych w jednej operacji • min_quantity (int) — minimalna liczba towarów przetworzonych w jednej operacji • supply_operations (int) — liczba operacji typu «dostawa» • shipment_operations (int) — liczba operacji typu «wysyłka» • transfer_operations (int) — liczba operacji typu «transfer»
sobes.tech AI
Odpowiedź od 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 значения, поэтому не нужно дополнительной фильтрации.