Начните с 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;
Каждая продажа соединяется с единственным товаром и категорией, поэтому сумма не размножается. Если добавить таблицу с несколькими строками на продажу, например тегами, перед соединением потребуется агрегация или другой способ исключить двойной счёт.