Воронка в SQL: почему наличие трёх событий ещё не означает прохождение

Пользователь открывал карточку, начинал оформление и платил, но в неправильном порядке. Простые флаги наличия событий засчитают его воронке. Для последовательной конверсии необходимо связать шаги временем и выбранной сущностью, например заказом.

Как разобрать ситуацию

В учебной модели один пользователь имеет не более одной попытки каждого шага. Сравниваем временные отметки: оформление должно быть после просмотра, а оплата после оформления. Для реального продукта с несколькими попытками придётся выбирать допустимую цепочку событий; независимый MIN для каждого типа способен соединить чужие попытки и исказить результат.

Пример и ожидаемый результат

У первого пользователя просмотр был в минуту 1, оформление в 3, оплата в 5. У второго оплата стоит в 2, а оформление в 4. Полностью прошёл только первый, несмотря на одинаковый набор названий событий.

WITH attempts(user_id,view_t,checkout_t,pay_t) AS(VALUES(1,1,3,5),(2,1,4,2),(3,1,2,NULL)) 
SELECT user_id 
FROM attempts 
WHERE checkout_t>=view_t AND pay_t>=checkout_t 
ORDER BY user_id;

Запрос возвращает только пользователя 1. Контрольный набор показывает, что проверяется порядок, а не простое присутствие всех событий.

Проверка перед применением

  • Добавьте пользователя без оплаты: он должен остаться на предыдущем шаге.
  • Определите, допускаются ли события с одинаковым временем и как разрешаются такие совпадения.
  • Проверьте, не объединяете ли вы шаги разных заказов одного пользователя.

Попросите аналитика вручную восстановить путь нескольких клиентов с неуспешной конверсией. Это полезнее сверки только общего процента: одна ошибочная цепочка может компенсировать другую. Также зафиксируйте, измеряете ли вы людей, сессии или заказы, иначе разные команды получат несопоставимые воронки.

Границы решения

Этот пример намеренно хранит одну попытку в строке. Для событийного журнала нужны явные правила окна конверсии, повторных попыток и связывания по session_id или order_id.

Если запросы уже пишутся, а уверенности в кардинальности, оконных рамках и проверке результата не хватает, продолжить практику можно в нашем платном курсе

Продвинутый SQL: сложные запросы и задачи для собеседований. Перед записью сравните программу со своей задачей и подготовкой.

Техническая справка: www.sqlite.org: документация.

Следующий шаг: Сложные SQL-запросы: разборы расчётов и ошибок. По смежным вопросам: Поздние события в SQL: почему вчерашний отчёт меняется сегодня, Просроченные заявки в SQL: почему открытые тикеты нельзя выбрасывать из SLA.