Intern
**SQL–тапсырмалары** 1) Наурыз 2024 айында әр орындаушы (executor) үшін "processing" мәртебесіндегі тапсырыстардың санын шығарыңыз, тек басымдылығы жоғары (priority = 'high') тапсырыстар үшін. Санақ бойынша кему ретімен сұрыптаңыз. 0 тапсырысы бар орындаушыларды шығарып тастаңыз. 2) Категориялары бойынша сәтті аяқталған (completed) тапсырыстардың санын шығарыңыз, олардың орта табысы > 70000, және тек клиенттері ID >= 1002 болатындар. Орта табысы белгісіз категорияларды нәтижеден шығарыңыз. 3) orders_log кестесіне rank бағанын қосыңыз, ол әр орындаушы (executor) үшін timestamp бойынша өсу ретімен жазбаларды ранжирлейді, бірақ тек "pending" немесе "processing" мәртебесіндегі тапсырыстар үшін. Мысал нәтижесі (executor=1):
sobes.tech AI
AI-дан жауап
- Наурыз 2024 жылы әр орындаушы үшін "processing" мәртебесіндегі тапсырыстар саны:
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;
- orders_log кестесіне ранг бағанын қосу, әр орындаушы үшін уақыт белгілері бойынша реттеу үшін, бірақ тек "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-те терезе функциясын қолдануға болады.