Junior
Lojistik şirketi için rapor Bir lojistik şirketinde analistsiniz ve depolardaki operasyonları kaydediyorsunuz. Her depo verimliliği hakkında bir rapor hazırlamanız gerekiyor. Her depo için hesaplayın: • toplam operasyon sayısı (count_operations); • depoda işlenen toplam ürün sayısı (sum_quantity); • sadece belirtilen zamanla (NULL olmayan) işlemleri dikkate alarak ortalama işlem süresi (avg_processing_time), en yakın tam sayıya yuvarlanmış; • bir işlemde işlenen maksimum ve minimum ürün sayısı (max_quantity, min_quantity); • her işlem türü için ayrı sütunlarda: tedarik işlemleri (supply_operations), sevkiyat işlemleri (shipment_operations), transfer işlemleri (transfer_operations). Toplam işlem sayısı 2'den fazla olan ve ortalama işlem süresi 60 dakikayı aşmayan depoları filtreleyin. Sonucu depo ID'sine göre artan sırayla sıralayın. Giriş formatı operations tablosu: • operation_id (int) — işlem kimliği • warehouse_id (int) — depo kimliği • operation_type (text) — işlem türü: «tedarik», «sevkiyat», «transfer» • quantity (int) — işlemdeki ürün adedi • operation_date (timestamp) — işlem tarihi ve saati • processing_time (int) — işlem süresi processing_time sütunu NULL değerler içerebilir. Çıkış formatı Sorgu, aşağıdaki sırayla alanlar içeren bir tablo döndürmelidir: • warehouse_id (int) — depo kimliği • count_operations (int) — depoda gerçekleştirilen toplam işlem sayısı • sum_quantity (int) — depoda işlenen toplam ürün sayısı • avg_processing_time (numeric) — işlem süresinin ortalaması (dakika cinsinden), sadece NULL olmayan işlemler dikkate alınarak, en yakın tam sayıya yuvarlanmış • max_quantity (int) — bir işlemde işlenen maksimum ürün sayısı • min_quantity (int) — bir işlemde işlenen minimum ürün sayısı • supply_operations (int) — «tedarik» türündeki işlem sayısı • shipment_operations (int) — «sevkiyat» türündeki işlem sayısı • transfer_operations (int) — «transfer» türündeki işlem sayısı
sobes.tech yapay zeka
AI'dan gelen yanıt
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 значения, поэтому не нужно дополнительной фильтрации.