Три таблицы: 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-задачи