Sobes.tech
Junior

Логистикалык компания үчүн отчет Сиз логистикалык компаниянын аналитикасыңыз, ал складдардагы операцияларды эсепке алат. Сиз ар бир складдын иштөө эффективдүүлүгү боюнча отчет түзүшүңүз керек. Ар бир склад үчүн эсептеңиз: • жалпы операциялар саны (count_operations); • сактагычта иштетилген товарлардын жалпы саны (sum_quantity); • операциянын орточо иштетүү убактысы (avg_processing_time), белгиленген убакыт менен гана операциялар үчүн (NULL эмес), бүтүн санга жакындатылган; • бир операцияда иштетилген товарлардын максималдуу жана минималдуу саны (max_quantity, min_quantity); • ар бир түрдөгү операциялардын саны («жеткирүү», «жөнөтүү», «айырмалоо») өзүнчө колонкаларда: supply_operations, shipment_operations, transfer_operations. Жалпы операциялар саны 2ден ашкан жана орточо иштетүү убактысы 60 мүнөттөн ашпаган складтарды фильтрлөө. Натыйжаны склад ID боюнча өсүүчү тартипте сорттоо. Кирүү форматы Operation таблицасы: • operation_id (int) — операциянын уникалдуу идентификатору • warehouse_id (int) — складдын идентификатору • operation_type (text) — операциянын түрү: «жеткирүү», «жөнөтүү», «айырмалоо» • quantity (int) — операциядагы товарлардын саны • operation_date (timestamp) — операциянын датасы жана убактысы • processing_time (int) — операциянын иштетүү убактысы processing_time колонки пропусктарды камтышы мүмкүн. Чыгуу форматы Суроо төмөнкүдөй багыттагы таблицаны кайтаруусу керек: • warehouse_id (int) — складдын уникалдуу идентификатору • count_operations (int) — складта жүргүзүлгөн жалпы операциялар саны • sum_quantity (int) — складта иштетилген товарлардын жалпы саны • avg_processing_time (numeric) — операциянын орточо иштетүү убактысы (минутта), NULL эмес убакыт менен операциялар үчүн, бүтүн санга жакындатылган • max_quantity (int) — бир операцияда иштетилген эң көп товар саны • min_quantity (int) — бир операцияда иштетилген эң аз товар саны • supply_operations (int) — «жеткирүү» операцияларынын саны • shipment_operations (int) — «жөнөтүү» операцияларынын саны • transfer_operations (int) — «айырмалоо» операцияларынын саны

sobes.tech AI

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