Вступить в клуб →
средняявопросПродуктовые метрики и юнит-экономика

Запрос называется «недельный retention», но считает другое

Аналитик прислал запрос и подписал его как недельный retention продукта:

SELECT COUNT(DISTINCT e.user_id) * 1.0
       / (SELECT COUNT(*) FROM users) AS retention
FROM events e
WHERE e.event_date >= CURRENT_DATE - INTERVAL '7 day'

Вы видите, что число месяц от месяца падает, хотя продукт растёт. В чём дело?

  • COUNT(DISTINCT ...) в числителе занижает результат: пользователя нужно считать по числу его событий.
  • Фильтр по дате должен стоять в HAVING, иначе часть событий за неделю не попадёт в выборку.
  • Умножение на 1.0 теряет точность на больших числах: результат надо явно приводить к типу decimal.
  • В знаменателе — все зарегистрированные за всю историю, а не когорта: с ростом базы метрика падает сама по себе.

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

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

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

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