Как посчитать выручку по категориям с нулевыми продажами?

Начните с categories, выполните два LEFT JOIN и сгруппируйте по категории. COALESCE(SUM(s.amount), 0) заменит отсутствие продаж нулевой выручкой.

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

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

Начните с categories, выполните два LEFT JOIN и сгруппируйте по категории. COALESCE(SUM(s.amount), 0) заменит отсутствие продаж нулевой выручкой.

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

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

Условие

Даны categories(id, name), products(id, category_id) и sales(id, product_id, amount). Первичные ключи уникальны; amount — неотрицательная выручка одной завершённой продажи в одной валюте. Нужно вывести выручку каждой категории, включая категории без товаров или продаж.

Ответ

Начните с categories, выполните два LEFT JOIN и сгруппируйте по категории. COALESCE(SUM(s.amount), 0) заменит отсутствие продаж нулевой выручкой.

SELECT c.id, c.name, COALESCE(SUM(s.amount), 0) AS revenue
FROM categories c
LEFT JOIN products p ON p.category_id = c.id
LEFT JOIN sales s ON s.product_id = p.id
GROUP BY c.id, c.name
ORDER BY c.id;

Каждая продажа соединяется с единственным товаром и категорией, поэтому сумма не размножается. Если добавить таблицу с несколькими строками на продажу, например тегами, перед соединением потребуется агрегация или другой способ исключить двойной счёт.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее