Вступить в клуб →
сложнаявопросМетрики delivery и работа со стейкхолдерами

Retention седьмого дня равен 100% во всех когортах

В отчёт стейкхолдерам попал показатель удержания на седьмой день, и он равен 100% для всех когорт апреля. Вы просите показать запрос:

SELECT COUNT(DISTINCT r.user_id) * 100.0
       / COUNT(DISTINCT i.user_id) AS retention_d7
FROM installs i
LEFT JOIN events r
       ON r.user_id = i.user_id
      AND r.event_date = i.install_date + INTERVAL '7 day'
WHERE i.install_date BETWEEN '2026-04-01' AND '2026-04-30'
  AND r.event_date IS NOT NULL;

Почему показатель всегда равен 100%?

  • `INTERVAL '7 day'` прибавляет к дате установки лишний день, поэтому в числитель попадают события восьмого дня и доля завышается.
  • `COUNT(DISTINCT ...)` в числителе и знаменателе фактически считает одну и ту же таблицу событий, поэтому дробь всегда сокращается в единицу.
  • Условие `r.event_date IS NOT NULL` в WHERE превращает LEFT JOIN во внутреннее соединение: в знаменателе остаются только вернувшиеся пользователи.
  • Диапазон BETWEEN захватывает целый месяц, поэтому когорты разных дней смешиваются в одну и итоговая доля искажается вверх.

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела