Junior
Logistika kompaniyasi uchun hisobot Siz logistika kompaniyasida tahlilchisiz va omborlardagi operatsiyalarni hisobga olasiz. Har bir omborning samaradorligi haqida hisobot tayyorlashingiz kerak. Har bir ombor uchun hisoblang: • umumiy operatsiyalar soni (count_operations); • omborda ishlov berilgan umumiy mahsulotlar soni (sum_quantity); • faqat belgilangan vaqt bilan (NULL bo'lmagan) operatsiyalarni hisobga olgan holda, operatsiya o'rtacha ishlov vaqti (avg_processing_time), butun son bilan yaxlitlangan; • bir operatsiyada ishlov berilgan maksimal va minimal mahsulotlar soni (max_quantity, min_quantity); • har bir turdagi operatsiyalar soni («yetkazib berish», «jo'natish», «otransfer») alohida ustunlarda: supply_operations, shipment_operations, transfer_operations. Omborlarni filtrlash, ularning umumiy operatsiyalar soni 2 dan ortiq va o'rtacha ishlov vaqti 60 daqiqadan oshmaydigan. Natijani ombor ID bo'yicha o'sish tartibida saralash. Kiritish formati Operationlar jadvali: • operation_id (int) — operatsiya identifikatori • warehouse_id (int) — ombor ID • operation_type (text) — operatsiya turi: «yetkazib berish», «jo'natish», «otransfer» • quantity (int) — operatsiyadagi mahsulotlar soni • operation_date (timestamp) — operatsiya sanasi va vaqti • processing_time (int) — operatsiya ishlov vaqti Processing_time ustuni NULL qiymatlarni o'z ichiga olishi mumkin. Chiqish formati So'rov quyidagi tartibda maydonlar bilan jadvalni qaytarishi kerak: • warehouse_id (int) — ombor ID • count_operations (int) — ombor ichida amalga oshirilgan umumiy operatsiyalar soni • sum_quantity (int) — ombor ichida ishlov berilgan umumiy mahsulotlar soni • avg_processing_time (numeric) — operatsiya o'rtacha ishlov vaqti (daqiqalarda), faqat NULL bo'lmagan operatsiyalarni hisobga olgan holda, butun son bilan yaxlitlangan • max_quantity (int) — bir operatsiyada ishlov berilgan maksimal mahsulotlar soni • min_quantity (int) — bir operatsiyada ishlov berilgan minimal mahsulotlar soni • supply_operations (int) — «yetkazib berish» turidagi operatsiyalar soni • shipment_operations (int) — «jo'natish» turidagi operatsiyalar soni • transfer_operations (int) — «otransfer» turidagi operatsiyalar soni
sobes.tech AI
AIdan javob
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 значения, поэтому не нужно дополнительной фильтрации.