Junior
Logistika şirkəti üçün hesabat Siz logistika şirkətində analistsiniz və anbarlardakı əməliyyatları qeyd edirsiniz. Hər bir anbarın effektivliyi haqqında hesabat hazırlamalısınız. Hər bir anbar üçün hesablayın: • ümumi əməliyyatların sayı (count_operations); • anbarın işlənmiş ümumi məhsul sayı (sum_quantity); • yalnız göstərilən vaxtla (NULL olmayan) əməliyyatları nəzərə alaraq, əməliyyatın orta işləmə vaxtı (avg_processing_time), ən yaxın tam sayıya yuvarlanmış; • bir əməliyyatda işlənmiş maksimum və minimum məhsul sayı (max_quantity, min_quantity); • hər əməliyyat növü üçün ayrı sütunlarda: tədarük əməliyyatları (supply_operations), göndərmə əməliyyatları (shipment_operations), transfer əməliyyatları (transfer_operations). Anbarları filtrləyin, onların ümumi əməliyyat sayı 2-dən çox və orta işləmə vaxtı 60 dəqiqədən çox olmayan. Nəticəni anbar ID-ə görə artan sırayla sıralayın. Giriş formatı Əməliyyatlar cədvəli: • operation_id (int) — əməliyyatın unikal identifikatoru • warehouse_id (int) — anbar ID • operation_type (text) — əməliyyat növü: «tədarük», «göndərmə», «transfer» • quantity (int) — əməliyyatda olan məhsul sayı • operation_date (timestamp) — əməliyyatın tarixi və vaxtı • processing_time (int) — əməliyyatın işləmə vaxtı Processing_time sütunu NULL dəyərlər içərə bilər. Çıxış formatı Sorğu aşağıdakı sahələrlə birlikdə cədvəl qaytarmalıdır: • warehouse_id (int) — anbarın unikal ID-si • count_operations (int) — anbar daxilində həyata keçirilmiş ümumi əməliyyatların sayı • sum_quantity (int) — anbar daxilində işlənmiş ümumi məhsul sayı • avg_processing_time (numeric) — əməliyyatın orta işləmə vaxtı (dəqiqələrdə), yalnız NULL olmayan əməliyyatlar nəzərə alınaraq, ən yaxın tam sayıya yuvarlanmış • max_quantity (int) — bir əməliyyatda işlənmiş maksimum məhsul sayı • min_quantity (int) — bir əməliyyatda işlənmiş minimum məhsul sayı • supply_operations (int) — «tədarük» növündə əməliyyatların sayı • shipment_operations (int) — «göndərmə» növündə əməliyyatların sayı • transfer_operations (int) — «transfer» növündə əməliyyatların sayı
sobes.tech Süni İntellekt
AI-dan cavab
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 значения, поэтому не нужно дополнительной фильтрации.