final_cvr DESC놀이기구 줄. 입구에 100명 → 중간에 60명 → 실제로 탄 사람 20명. 각 지점에 몇 명 남았나를 세는 것.
| 단계 | 사람 수 |
|---|---|
| view_landing (들어옴) | 1,000 |
| signup_done (가입 완료) | 620 |
| first_payment (첫 결제) | 180 |
최종 전환율 = 180 / 1,000 × 100 = 18.00
묻는 것 · 세로로 쌓인 이벤트를 가로 단계로 펼칠 줄 아는가.
COUNT(DISTINCT CASE WHEN ... THEN user_id END).SELECT channel,
COUNT(DISTINCT CASE WHEN event_name='view_landing' THEN user_id END) AS landing_users,
COUNT(DISTINCT CASE WHEN event_name='signup_done' THEN user_id END) AS signup_users,
COUNT(DISTINCT CASE WHEN event_name='first_payment' THEN user_id END) AS paid_users,
ROUND(100.0 * COUNT(DISTINCT CASE WHEN event_name='first_payment' THEN user_id END)
/ NULLIF(COUNT(DISTINCT CASE WHEN event_name='view_landing' THEN user_id END), 0), 2)
AS final_cvr
FROM events
GROUP BY channel
ORDER BY final_cvr DESC;COUNT(CASE WHEN ...) 는 0 이 아니라 NULL 을 세지 않는 것이다. ELSE 를 쓰지 말 것. ELSE 0 을 넣으면 전부 세어진다.“단계 간 전환율”(2→3, 3→4)로 바뀌면 분모를 직전 단계로 바꾸면 된다.