Junior
Ataskaita logistikos įmonei Jūs esate logistikos įmonės analitikas, kuris stebi sandėlių operacijų apskaitą. Jums reikia paruošti ataskaitą apie kiekvieno sandėlio efektyvumą. Kiekvienam sandėliui apskaičiuokite: • bendrą operacijų skaičių (count_operations); • sandėlyje apdorotų prekių bendrą kiekį (sum_quantity); • vidutinį operacijos apdorojimo laiką (avg_processing_time), įskaitant tik operacijas su nurodytu laiku (ne NULL), suapvalintą iki sveiko skaičiaus; • didžiausią ir mažiausią prekių kiekį, apdorotą vienoje operacijoje (max_quantity, min_quantity); • kiekvieno tipo operacijų skaičių („pateikimas“, „siuntimas“, „perdavimas“) atskirose stulpeliuose: supply_operations, shipment_operations, transfer_operations. Filtruokite sandėlius, kurių bendras operacijų skaičius yra didesnis nei 2 ir vidutinis apdorojimo laikas neviršija 60 minučių. Rodyti rezultatą pagal sandėlio ID didėjimo tvarka. Įvesties formatas Operacijų lentelė: • operation_id (int) — unikalus operacijos identifikatorius • warehouse_id (int) — sandėlio identifikatorius • operation_type (text) — operacijos tipas: „pateikimas“, „siuntimas“, „perdavimas“ • quantity (int) — prekių kiekis operacijoje • operation_date (timestamp) — operacijos data ir laikas • processing_time (int) — operacijos apdorojimo laikas Stulpelis processing_time gali būti tuščias. Išvesties formatas Užklausa turi grąžinti lentelę su laukais tokia tvarka: • warehouse_id (int) — sandėlio unikalus identifikatorius • count_operations (int) — bendras atliktų operacijų skaičius sandėlyje • sum_quantity (int) — bendras apdorotų prekių kiekis sandėlyje • avg_processing_time (numeric) — operacijos vidutinis apdorojimo laikas (minutėmis), įskaitant tik ne NULL laikus, suapvalintą iki sveiko skaičiaus • max_quantity (int) — didžiausias apdorotų prekių kiekis vienoje operacijoje • min_quantity (int) — mažiausias apdorotų prekių kiekis vienoje operacijoje • supply_operations (int) — „pateikimo“ operacijų skaičius • shipment_operations (int) — „siuntimo“ operacijų skaičius • transfer_operations (int) — „perdavimo“ operacijų skaičius
sobes.tech AI
Atsakymas iš 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 значения, поэтому не нужно дополнительной фильтрации.