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

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. INNER JOIN без ключа связи для пар дат и продуктов смысла не имеет, а UNION ALL просто склеивает строки и не порождает пар. Это стандартный паттерн «date spine» в аналитике.

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

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