У вас есть два источника событий: web_events и app_events. В каждом вы умеете считать уникальных пользователей по user_id. Как корректно получить общее число уникальных пользователей по двум источникам?

AПосчитать COUNT(DISTINCT user_id) отдельно в каждом источнике и просто сложить два числа, не учитывая возможное пересечение пользователей между источниками
BПосчитать COUNT(*) в обоих источниках и назвать суммарное число числом уникальных пользователей по двум платформам, опираясь на сырое количество строк в таблицах
CВзять только пересечение источников по user_id и считать его общим итогом, опираясь на тех пользователей, которые точно есть и в web_events, и в app_events
DСделать объединение строк из обоих источников по user_id и затем посчитать COUNT(DISTINCT user_id) для дедупликации повторяющихся записей
Правильный ответ. Если user_id может быть и в web_events, и в app_events, то суммирование двух COUNT(DISTINCT user_id) без объединения завышает результат из-за пересечения.

Разбор

Здесь каждый источник — это множество значений user_id, и вам нужен размер их объединения. Самый прямой способ — объединить источники и сделать дедупликацию через COUNT(DISTINCT user_id). Если просто сложить два COUNT(DISTINCT user_id), вы посчитаете пересечение дважды и получите завышение, а пересечение в чистом виде даст заниженное число; COUNT(*) по сырым строкам считает события, а не пользователей. Такая проверка адекватности важна для отчётов по аудитории на нескольких платформах.

Проверь себя · 1/3разбор после ответа
Аналитик сложил DAU за 30 дней и получил 3 млн, а MAU за тот же месяц равен 400 тыс уникальных пользователей. Почему это может быть нормально?
Открыть Карьерник в Telegram

Ещё вопросы по теме «Теория множеств и дедупликация»