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

ACOUNT(*) на результате JOIN с GROUP BY user_id для подсчёта уникальных пользователей с событиями
BCOUNT(user_id) после JOIN таблиц users и events с фильтром WHERE event_id IS NOT NULL
CCOUNT(DISTINCT event_id) на результате JOIN таблиц users и events для подсчёта уникальных пользователей
DCOUNT(DISTINCT user_id) на результате JOIN таблиц users и events по user_id для уникальных
Правильный ответ. При связи один-ко-многим в JOIN для подсчёта пользователей нужен COUNT(DISTINCT user_id), иначе вы посчитаете события.

Разбор

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

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

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

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

Открыть Карьерник в браузере

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