Нужно построить отчёт: по каждому продукту и каждому дню месяца — сумма продаж, включая дни с нулевыми продажами. Как сформировать каркас из всех пар дата-продукт?

AИспользовать CROSS JOIN между таблицей дат и таблицей продуктов для всех пар
BИспользовать INNER JOIN между таблицей дат и продуктов по общему ключу связи
CИспользовать LEFT JOIN таблицы продуктов к таблице дат по столбцу created_at
DИспользовать UNION ALL для объединения таблицы дат и продуктов в один результат
Правильный ответ. CROSS JOIN генерирует декартово произведение двух таблиц — каждая дата сочетается с каждым продуктом, что даёт полный каркас для LEFT JOIN к продажам.

Разбор

CROSS JOIN создаёт все возможные комбинации строк из двух таблиц: если дат 30 и продуктов 5, получится 150 строк. Затем этот каркас соединяют через LEFT JOIN с таблицей продаж — для дней без продаж будут NULL, которые заменяют на 0 через COALESCE. Это стандартный паттерн «date spine» в аналитике.

Проверь себя · 1/3разбор после ответа
Таблица tiers хранит ценовые диапазоны: tier_name, min_price, max_price. Нужно каждому продукту присвоить тариф по его цене. Как написать соединение?
Тренировать SQL в Telegram

Ещё вопросы по теме «JOIN и операции множеств»