Junior
Rapport pour l'entreprise logistique Vous êtes analyste dans une entreprise logistique qui enregistre les opérations dans les entrepôts. Vous devez établir un rapport sur l'efficacité de chaque entrepôt. Pour chaque entrepôt, calculez : • le nombre total d'opérations (count_operations); • le nombre total de produits traités dans l'entrepôt (sum_quantity); • le temps moyen de traitement d'une opération (avg_processing_time), en ne considérant que les opérations avec un temps spécifié (non NULL), arrondi à l'entier le plus proche; • le nombre maximum et minimum de produits traités en une seule opération (max_quantity, min_quantity); • le nombre d'opérations de chaque type (« livraison », « expédition », « transfert ») dans des colonnes séparées : supply_operations, shipment_operations, transfer_operations. Filtrez les entrepôts dont le nombre total d'opérations est supérieur à 2 et dont le temps moyen de traitement ne dépasse pas 60 minutes. Triez le résultat par ID d'entrepôt par ordre croissant. Format d'entrée Table operations: • operation_id (int) — identifiant unique de l'opération • warehouse_id (int) — identifiant de l'entrepôt • operation_type (text) — type d'opération : « livraison », « expédition », « transfert » • quantity (int) — nombre d'unités du produit dans l'opération • operation_date (timestamp) — date et heure de l'opération • processing_time (int) — temps de traitement de l'opération La colonne processing_time peut contenir des valeurs nulles. Format de sortie La requête doit retourner une table avec les champs dans cet ordre : • warehouse_id (int) — identifiant unique de l'entrepôt • count_operations (int) — nombre total d'opérations effectuées dans l'entrepôt • sum_quantity (int) — nombre total de produits traités dans l'entrepôt • avg_processing_time (numeric) — temps moyen de traitement de l'opération (en minutes), en ne considérant que les opérations avec un temps non nul, arrondi à l'entier le plus proche • max_quantity (int) — quantité maximale de produits traités en une seule opération • min_quantity (int) — quantité minimale de produits traités en une seule opération • supply_operations (int) — nombre d'opérations de type « livraison » • shipment_operations (int) — nombre d'opérations de type « expédition » • transfer_operations (int) — nombre d'opérations de type « transfert »
sobes.tech IA
Réponse de l'IA
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 значения, поэтому не нужно дополнительной фильтрации.