Junior
Αναφορά για την εταιρεία logistics Είστε αναλυτής σε μια εταιρεία logistics που καταγράφει τις επιχειρήσεις στα αποθήκες. Πρέπει να ετοιμάσετε μια αναφορά για την αποδοτικότητα κάθε αποθήκης. Για κάθε αποθήκη, υπολογίστε: • το συνολικό αριθμό επιχειρήσεων (count_operations); • το συνολικό αριθμό προϊόντων που επεξεργάστηκε η αποθήκη (sum_quantity); • τον μέσο χρόνο επεξεργασίας μιας επιχείρησης (avg_processing_time), λαμβάνοντας υπόψη μόνο τις επιχειρήσεις με καθορισμένο χρόνο (όχι NULL), στρογγυλοποιημένο στον πλησιέστερο ακέραιο; • το μέγιστο και ελάχιστο αριθμό προϊόντων που επεξεργάστηκε σε μια επιχείρηση (max_quantity, min_quantity); • τον αριθμό επιχειρήσεων κάθε τύπου («παράδοση», «αποστολή», «μεταφορά») σε ξεχωριστές στήλες: supply_operations, shipment_operations, transfer_operations. Φιλτράρετε τις αποθήκες όπου ο συνολικός αριθμός επιχειρήσεων είναι μεγαλύτερος από 2 και ο μέσος χρόνος επεξεργασίας δεν υπερβαίνει τα 60 λεπτά. Ταξινομήστε το αποτέλεσμα κατά ID αποθήκης σε αύξουσα σειρά. Μορφή εισόδου Πίνακας operations: • operation_id (int) — μοναδικός αναγνωριστικός αριθμός επιχείρησης • warehouse_id (int) — ID αποθήκης • operation_type (text) — τύπος επιχείρησης: «παράδοση», «αποστολή», «μεταφορά» • quantity (int) — αριθμός μονάδων προϊόντος στην επιχείρηση • operation_date (timestamp) — ημερομηνία και ώρα επιχείρησης • processing_time (int) — χρόνος επεξεργασίας επιχείρησης Η στήλη processing_time μπορεί να περιέχει NULL τιμές. Μορφή εξόδου Το ερώτημα πρέπει να επιστρέφει έναν πίνακα με τα πεδία με την ακόλουθη σειρά: • warehouse_id (int) — μοναδικό ID αποθήκης • 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 значения, поэтому не нужно дополнительной фильтрации.