Конверсия в SQL всегда выходит нулём
PostgreSQL. Аналитик считает конверсию в покупку, но колонка cr во всех строках равна 0, хотя покупки в данных есть:
SELECT
date_trunc('day', e.event_time) AS d,
COUNT(DISTINCT CASE WHEN e.name = 'purchase' THEN e.user_id END)
/ COUNT(DISTINCT e.user_id) AS cr
FROM events e
GROUP BY 1;
В чём причина?
- CASE без ветки ELSE возвращает NULL для всех строк, поэтому числитель всегда пустой
- Происходит деление на ноль, результат обнуляется — нужно обернуть знаменатель в NULLIF
- Оба COUNT возвращают целый тип, а деление целых в PostgreSQL отбрасывает дробную часть: 0.03 превращается в 0. Нужно привести числитель к дробному типу, например умножить на 1.0 или сделать CAST в numeric
- Не хватает GROUP BY по user_id: без него агрегаты считаются по одной строке и дают ноль
