Средний чек курьера без двойного счёта

Средняя JOIN-запросы Самокат

Условие задачи

В таблице orders — заказы курьеров с суммой (total_amount), в order_items — позиции каждого заказа (у заказа может быть несколько позиций). Посчитайте по каждому курьеру: число заказов, суммарную выручку и средний чек (AOV). Подвох: если соединить orders с order_items, заказы с несколькими позициями задвоятся и SUM/AVG раздуются (fan-out). Считайте метрики напрямую по orders, не делая лишний JOIN. Отсортируйте по выручке убыванию, затем по courier_id.

Схема данных

CREATE TABLE orders (
  order_id INTEGER PRIMARY KEY,
  courier_id INTEGER,
  order_date TEXT,
  total_amount INTEGER
);
CREATE TABLE order_items (
  item_id INTEGER PRIMARY KEY,
  order_id INTEGER,
  product TEXT,
  qty INTEGER
);

Темы

fan-out aggregation aov group-by gotcha

Подсказки

Что проверяет эта задача

Задача «Средний чек курьера без двойного счёта» учит соединять таблицы через JOIN, выбирать правильный тип (INNER/LEFT) и не задваивать строки при связи один-ко-многим. Такие задачи встречаются на собеседованиях в Самокат и других IT-компаниях. Уровень средний — типичная боевая задача на уверенное владение SQL.

Как подступиться к решению

Сначала разберись со схемой данных и пойми, какой результат нужен на выходе. Определи, какие таблицы и поля задействованы, и собирай запрос пошагово: фильтрация → соединение или группировка → итоговый отбор и сортировка. Проверь результат на крайних случаях — NULL, дубликаты, пустые группы. Свой запрос сразу прогоняешь автопроверкой в интерактивной SQL-песочнице на реальной базе (SQLite и PostgreSQL 16 прямо в браузере).

Разбор темы с примерами — в гайде «JOIN-запросы в SQL». Хочешь системно с нуля — пройди бесплатный курс «SQL с нуля».

Решить в интерактивной SQL-песочнице → ← Все SQL-задачи