Sobes.tech
Junior

ანგარიში ლოჯისტიკური კომპანიისთვის თქვენ ხართ ლოჯისტიკური კომპანიის ანალიტიკოსი, რომელიც აკონტროლებს საწყობებზე ოპერაციების აღრიცხვას. თქვენ გჭირდებათ თითოეული საწყობის ეფექტიანობის შესახებ ანგარიში მოამზადოთ. თითოეული საწყობისთვის გამოთვალეთ: • საერთო ოპერაციების რაოდენობა (count_operations); • საწყობში დამუშავებული საქონლის საერთო რაოდენობა (sum_quantity); • ოპერაციის საშუალო დრო (avg_processing_time), მხოლოდ მითითებული დროის ოპერაციებისთვის (NULL არ უნდა იყოს), მთელი რიცხვამდე მოხაზული; • ერთ ოპერაციაში დამუშავებული საქონლის მაქსიმალური და მინიმალური რაოდენობა (max_quantity, min_quantity); • თითოეული ტიპის ოპერაციების რაოდენობა («მიწოდება», «გადაზიდვა», «გადანაწილება») ცალკეულ სვეტებში: supply_operations, shipment_operations, transfer_operations. ფილტრეთ საწყობები, სადაც საერთო ოპერაციების რაოდენობა მეტია 2-ზე და საშუალო დრო არ აღემატება 60 წუთს. შედეგი sort-ის მიხედვით დაალაგეთ საწყობის ID-ის მიხედვით ზრდადობით. შესავალი ფორმატი ოპერაციების სია: • 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 значения, поэтому не нужно дополнительной фильтрации.