Intern
**SQL առաջադրանքներ** 1) Ներկայացրեք "processing" կարգավիճակով պատվերների քանակը յուրաքանչյուր կատարողի (executor) համար 2024 թվականի մարտին միայն առաջնահերթ (priority = 'high') պատվերների համար: Սորտավորեք քանակի նվազման կարգով: Հեռացրեք այն կատարողներին, որոնց պատվերների թիվը 0 է: 2) Ներկայացրեք հաջողությամբ ավարտված (completed) պատվերների քանակը ըստ կատեգորիաների, որոնց միջին եկամտը > 70000, հաշվի առնելով միայն այն պատվերները, որոնք հաճախորդների ID >= 1002 են: Հեռացրեք այն կատեգորիաները, որոնց միջին եկամտի մասին տեղեկություն չկա: 3) Ավելացրեք orders_log աղյուսակին rank սյունակ, որը դասավորում է գրառումները յուրաքանչյուր կատարողի համար timestamp-ով աճող կարգով, բայց միայն "pending" կամ "processing" կարգավիճակով պատվերների համար: Օրինակ արդյունքը (executor=1):
sobes.tech AI
Պատասխան AI-ից
- Количество заказов в статусе "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.