Sobes.tech
Intern

**SQL-taken** 1) Geef het aantal bestellingen in de status "processing" per uitvoerder (executor) voor maart 2024 ALLEEN voor prioritaire (priority = 'high') bestellingen. Sorteer op afname van aantal. Sluit uitvoerders met 0 bestellingen uit. 2) Geef het aantal succesvol voltooide (completed) bestellingen per categorie, waarvan de gemiddelde opbrengst > 70000, rekening houdend met alleen bestellingen van klanten met ID >= 1002. Sluit categorieën zonder bekende gemiddelde opbrengst uit. 3) Voeg aan de tabel orders_log een kolom rank toe, die de records rangschikt voor elke uitvoerder (executor) op timestamp in oplopende volgorde, maar alleen voor bestellingen met de status "pending" of "processing". Voorbeeld van resultaat (executor=1):

sobes.tech AI

Antwoord van AI

  1. Количество заказов в статусе "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;
  1. Количество успешно завершённых заказов по категориям, где средняя выручка > 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;
  1. Добавление столбца 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.