Junior
Ziņojums loģistikas uzņēmumam Jūs esat loģistikas uzņēmuma analītiķis, kurš uzrauga noliktavu operāciju uzskaiti. Jums jāizstrādā ziņojums par katra noliktavas efektivitāti. Katrā noliktavā aprēķiniet: • kopējo operāciju skaitu (count_operations); • noliktavā apstrādāto preču kopējo daudzumu (sum_quantity); • vidējo operācijas apstrādes laiku (avg_processing_time), ņemot vērā tikai operācijas ar norādīto laiku (ne NULL), noapaļotu līdz veselam skaitlim; • maksimālo un minimālo preču daudzumu, apstrādātu vienā operācijā (max_quantity, min_quantity); • katra veida operāciju skaitu («piegāde», «sūtīšana», «pārvietošana») atsevišķās kolonnās: supply_operations, shipment_operations, transfer_operations. Filtrējiet noliktavas, kuru kopējais operāciju skaits ir lielāks par 2 un vidējais apstrādes laiks nepārsniedz 60 minūtes. Rezultātu kārtojiet pēc noliktavas ID augošā secībā. Ievades formāts Operāciju tabula: • operation_id (int) — operācijas unikālais identifikators • warehouse_id (int) — noliktavas identifikators • operation_type (text) — operācijas veids: «piegāde», «sūtīšana», «pārvietošana» • quantity (int) — preču daudzums operācijā • operation_date (timestamp) — operācijas datums un laiks • processing_time (int) — operācijas apstrādes laiks Kolonna processing_time var saturēt izlaistus datus. Izvades formāts Vaicājumam jāatgriež tabula ar šādiem laukiem kārtībā: • warehouse_id (int) — noliktavas unikālais identifikators • count_operations (int) — kopējais veiktu operāciju skaits noliktavā • sum_quantity (int) — kopējais apstrādāto preču daudzums noliktavā • avg_processing_time (numeric) — operācijas vidējais apstrādes laiks (minūtēs), ņemot vērā tikai ne NULL laiku, noapaļots līdz veselam skaitlim • max_quantity (int) — lielākais apstrādāto preču daudzums vienā operācijā • min_quantity (int) — mazākais apstrādāto preču daudzums vienā operācijā • supply_operations (int) — «piegādes» operāciju skaits • shipment_operations (int) — «sūtīšanas» operāciju skaits • transfer_operations (int) — «pārvietošanas» operāciju skaits
sobes.tech AI
Atbilde no 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 значения, поэтому не нужно дополнительной фильтрации.