Intern
**Tâches SQL** 1) Affichez le nombre de commandes en statut "processing" pour chaque exécuteur en mars 2024 UNIQUEMENT pour les commandes prioritaires (priority = 'high'). Triez par ordre décroissant du nombre. Excluez les exécuteurs avec 0 commandes. 2) Affichez le nombre de commandes terminées avec succès par catégories, dont le revenu moyen > 70000, en ne tenant compte que des commandes de clients avec ID >= 1002. Excluez les catégories sans revenu moyen connu. 3) Ajoutez à la table orders_log une colonne rank, qui classe les enregistrements pour chaque exécuteur par timestamp en ordre croissant, mais uniquement pour les commandes avec le statut "pending" ou "processing". Exemple de résultat (exécuteur=1):
sobes.tech IA
Réponse de l'IA
- Количество заказов в статусе "processing" по каждому исполнителю за март 2024 года для приоритетных заказов:
SELECT executor, COUNT(*) AS orders_count
FROM orders
WHERE status = 'processing'
AND priority = 'high'
AND order_date >= '2024-03-01' AND order_date < '2024-04-01'
GROUP BY executor
HAVING COUNT(*) > 0
ORDER BY orders_count DESC;
- Количество успешно завершённых заказов по категориям, где средняя выручка > 70000, учитывая только клиентов с ID >= 1002:
SELECT category, COUNT(*) AS completed_orders
FROM orders
WHERE status = 'completed'
AND client_id >= 1002
GROUP BY category
HAVING AVG(revenue) > 70000;
- Добавление столбца rank в таблицу orders_log для ранжирования записей по timestamp для каждого исполнителя, но только для заказов со статусом "pending" или "processing":
ALTER TABLE orders_log ADD COLUMN rank INT;
WITH ranked AS (
SELECT id,
ROW_NUMBER() OVER (PARTITION BY executor ORDER BY timestamp ASC) AS rn
FROM orders_log
WHERE status IN ('pending', 'processing')
)
UPDATE orders_log ol
SET rank = r.rn
FROM ranked r
WHERE ol.id = r.id;
Если нужна динамическая выдача с ранжированием без изменения структуры, можно использовать оконную функцию в SELECT.