После JOIN users с events по user_id (one-to-many) вы хотите получить число пользователей, у которых был хотя бы один ивент. Какой расчёт даст корректное число пользователей?

ACOUNT(*) на результате JOIN
BCOUNT(DISTINCT user_id) на результате JOIN
CSUM(event_id) на результате JOIN
DAVG(event_id) на результате JOIN
Правильный ответ. В one-to-many JOIN для подсчёта пользователей нужен distinct по user_id, иначе вы считаете ивенты.

Разбор

Каждый пользователь с несколькими событиями даст несколько строк после JOIN — это duplication. COUNT(*) в таком датасете измеряет количество строк, а не количество пользователей. Чтобы считать пользователей, используйте COUNT(DISTINCT user_id) или заранее pre-aggregate события до одного флага на user_id.

Проверь себя · 1/3разбор после ответа
Для одного order_id в order_items есть 3 строки, а в payments есть 2 строки. Вы соединили всё в одну таблицу по order_id без предварительной агрегации. Сколько строк получится для этого заказа и почему?
Открыть Карьерник в Telegram

Ещё вопросы по теме «JOIN и кардинальность»