Запрос для разбора A/B: конверсия по группам считается неверно
Аналитик считает конверсию в заказ по группам A/B-теста:
SELECT ab.variant,
COUNT(o.order_id) * 1.0 / COUNT(ab.user_id) AS conversion
FROM ab_users ab
LEFT JOIN orders o ON o.user_id = ab.user_id
GROUP BY ab.variant
В таблице ab_users одна строка на пользователя, в orders — по строке на каждый заказ. Что не так с результатом?
- После JOIN строки размножаются: пользователь с тремя заказами даёт три строки, и знаменатель считает не пользователей.
- LEFT JOIN надо заменить на INNER JOIN, иначе пользователи без заказов вообще не попадут в расчёт конверсии.
- GROUP BY по variant недопустим, если агрегаты берутся из присоединённой таблицы: нужна оконная функция.
- COUNT(o.order_id) надо заменить на COUNT(*): иначе пустые строки после LEFT JOIN сломают числитель.
