Вы делаете JOIN таблицы users (1 строка на user_id) с таблицей events (много строк на user_id) и считаете COUNT(users.user_id) как уникальных пользователей в кампании. Получилось завышение. Какое исправление наиболее корректно?
AДедуплицировать на уровне
user_id: использовать COUNT(DISTINCT users.user_id) или предварительно агрегировать events до набора user_idBЗаменить
JOIN на UNION между таблицами: пересечение строк исчезнет и счётчик перестанет завышать аудиторию кампанииCОставить
COUNT(users.user_id) и поделить на среднее число events на пользователя для компенсации размножения строкDСчитать
COUNT(DISTINCT event_id) по таблице events как число уникальных пользователей в данной кампанииПравильный ответ. После
JOIN один user_id может повториться много раз, поэтому для уникальных пользователей нужна дедупликация через DISTINCT.Разбор
Когда вы присоединяете events к users, каждая строка events размножает строку user_id. Счётчик без дедупликации превращается в счётчик событий, а не аудитории. Правильная проверка адекватности — убедиться, что вы считаете размер набора user_id, например через COUNT(DISTINCT user_id). Замена на UNION не решает задачу подсчёта уникальных пользователей в одной кампании; деление на среднее — эвристика без гарантий; а COUNT(DISTINCT event_id) считает события, а не пользователей.
Проверь себя · 1/3разбор после ответа
Аналитик сложил
DAU за 30 дней и получил 3 млн, а MAU за тот же месяц равен 400 тыс уникальных пользователей. Почему это может быть нормально?Ещё вопросы по теме «Теория множеств и дедупликация»
- В таблице событий за день записано 2 млн строк, а в отчёте по аудитории видно 1.2 млн уникальных пользователей. Какое объяснение наиболее вероятно?
- В канале «поиск» 400 тыс уникальных пользователей, в канале «соцсети» 300 тыс, а пересечение между ними 100 тыс. Сколько уникальных пользователей в объединении этих двух множеств?
- В отчёте уникальные пользователи по каналам: email 200 тыс, push 150 тыс, sms 50 тыс. Сумма по строкам — 400 тыс, а общий итог по всем каналам — 260 тыс уникальных пользователей. Что это чаще всего означает?
- Чтобы посчитать число уникальных пользователей в объединении двух множеств `A` и `B`, зная `|A|`, `|B|` и `|A intersection B|`, какую формулу включения–исключения нужно использовать?
- Вы считаете число покупателей как уникальных пользователей за день. В данных есть `device_id` и `user_id` (если пользователь залогинен). Какой подход к дедупликации обычно более корректен?
- Все вопросы по «Теория множеств и дедупликация» →