Вступить в клуб →
средняявопросSQL и витрины данных

Конверсия в 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: без него агрегаты считаются по одной строке и дают ноль

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

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

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

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