Выручка по категориям, включая нулевые

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

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

Три таблицы: categories (категории), products (товары со ссылкой на категорию), sales (продажи со ссылкой на товар). Посчитайте выручку (qty * price) по каждой категории и обязательно покажите категории, где продаж не было, с выручкой 0. Подвох: при INNER JOIN категории без продаж пропадут, а SUM по пустоте вернёт NULL вместо 0. Отсортируйте по выручке убыванию, затем по названию.

Схема данных

CREATE TABLE categories (
  category_id INTEGER PRIMARY KEY,
  category_name TEXT
);
CREATE TABLE products (
  product_id INTEGER PRIMARY KEY,
  category_id INTEGER,
  product_name TEXT,
  price INTEGER
);
CREATE TABLE sales (
  sale_id INTEGER PRIMARY KEY,
  product_id INTEGER,
  qty INTEGER,
  sale_date TEXT
);

Темы

left-join coalesce null aggregation ties

Подсказки

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

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

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

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

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

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