Как посчитать воронку конверсии на SQL?
- Как посчитать конверсию из просмотра в покупку?
Для каждого пользователя определить, дошёл ли он до каждого шага в правильном порядке (время шага не раньше предыдущего) и в пределах окна (например, 7 дней от первого шага), затем посчитать число пользователей на каждом шаге и доли от первого и от предыдущего шага.
- Простой подсчёт «сколько было событий каждого типа» — не воронка: порядок и принадлежность одному пользователю не учтены
- Конверсию считают по пользователям или по сессиям — определяют заранее
- В ClickHouse есть windowFunnel, в продуктовой аналитике — готовые отчёты
А ещё Знаменатель: все, кто начал воронку, а не все пользователи
Подробно
Упрощение в примере: берётся первое событие каждого шага. Для точной воронки по сессиям или с повторными попытками нужен поиск последовательности (сначала просмотр, потом корзина после этого просмотра) — оконными функциями или специализированными функциями хранилища.
Решения, которые нужно оговорить:
- строгий порядок шагов или любой;
- окно конверсии (час, день, неделя);
- единица — пользователь, сессия или заказ;
- что делать с пользователями, начавшими в конце периода (ещё не успели сконвертироваться).
Интерпретация: самое большое падение между шагами — кандидат для исследования, но сначала проверяют трекинг: «потерянный» шаг часто означает неотправленное событие, а не реальный отток.
Пример
WITH steps AS (
SELECT user_id,
MIN(event_time) FILTER (WHERE event = 'view_item') AS t_view,
MIN(event_time) FILTER (WHERE event = 'add_to_cart') AS t_cart,
MIN(event_time) FILTER (WHERE event = 'purchase') AS t_buy
FROM events
WHERE event_time >= DATE '2026-09-01'
GROUP BY user_id
)
SELECT
COUNT(t_view) AS viewed,
COUNT(*) FILTER (WHERE t_cart >= t_view AND t_cart < t_view + INTERVAL '7 day') AS carted,
COUNT(*) FILTER (WHERE t_buy >= t_cart AND t_cart >= t_view
AND t_buy < t_view + INTERVAL '7 day') AS bought
FROM steps;Что хотят услышать
- Порядок шагов и окно конверсии.
- Подсчёт по пользователям и доли.
- Проверка корректности трекинга.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Посчитать число событий каждого типа за период и поделить соседние значения — это и есть конверсия воронки по шагам
- ✗Порядок шагов не важен, главное — факт события
- ✗Окно времени между шагами не нужно
- ✓Для каждого пользователя проверить шаги в правильном порядке и в пределах окна, затем считать пользователей
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.