SQL: пять задач на аналитику заказов и поиск лидирующего исполнителя

Посчитать по исполнителям приоритетные processing-заказы за март 2024 года.

Короткий ответ

Что ответить на собеседовании

Посчитать по исполнителям приоритетные processing-заказы за март 2024 года. Найти среднюю выручку по категории. Посчитать уникальных клиентов с заказами в Electronics. Вывести отклонённые или отменённые заказы. Найти исполнителя с наибольшим числом завершённых заказов.

Подробный разбор

Ответ с пояснениями

Условие

  1. Посчитать по исполнителям приоритетные processing-заказы за март 2024 года.
  2. Найти среднюю выручку по категории.
  3. Посчитать уникальных клиентов с заказами в Electronics.
  4. Вывести отклонённые или отменённые заказы.
  5. Найти исполнителя с наибольшим числом завершённых заказов.

Предполагается таблица orders с полями из запросов. В исходном условии смешаны названия status и state; ниже считаем, что статус хранится в одном поле state. Если в вашей схеме это status, замените имя последовательно во всех запросах.

  1. Количество заказов в статусе "processing" по каждому исполнителю за март 2024 года для приоритетных заказов:
SELECT executor, COUNT(*) AS processing_orders_count
FROM orders
WHERE state = 'processing'
  AND priority = 'high'
  AND order_date >= '2024-03-01' AND order_date < '2024-04-01'
GROUP BY executor;
  1. Средняя выручка по каждой категории товаров:
SELECT category, AVG(revenue) AS avg_revenue
FROM orders
GROUP BY category;
  1. Количество уникальных клиентов, сделавших заказы в категории "Electronics":
SELECT COUNT(DISTINCT client_id) AS unique_clients
FROM orders
WHERE category = 'Electronics';
  1. Список заказов, которые были отклонены или отменены:
SELECT *
FROM orders
WHERE state IN ('rejected', 'cancelled');
  1. Исполнитель, который обработал наибольшее количество заказов в статусе "completed":
WITH counts AS (
    SELECT executor, COUNT(*) AS n
    FROM orders
    WHERE state = 'completed'
    GROUP BY executor
)
SELECT executor, n
FROM counts
WHERE n = (SELECT MAX(n) FROM counts);

Последний запрос возвращает всех исполнителей, разделивших максимум. AVG пропускает неизвестную выручку, а COUNT(DISTINCT client_id) не учитывает NULL. Значение cancelled для отмены предполагается явно: его нужно сверить со справочником статусов.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку