채널별 퍼널 전환율

난이도 쉬움 · 권장 7분 · 출력 컬럼 channel, landing_users, signup_users, paid_users, final_cvr
이 문제 직접 풀어보기 →

문제

채널별로 아래 세 단계의 순 유저 수와 최종 전환율(%)을 구하세요. view_landing / signup_done / first_payment · 최종 전환율 = first_payment 유저 수 / view_landing 유저 수 × 100 · 소수점 둘째 자리까지 반올림합니다. · 최종 전환율 내림차순으로 정렬하세요.
정렬 final_cvr DESC

쉽게 설명하면

놀이기구 줄. 입구에 100명 → 중간에 60명 → 실제로 탄 사람 20명. 각 지점에 몇 명 남았나를 세는 것.

단계사람 수
view_landing (들어옴)1,000
signup_done (가입 완료)620
first_payment (첫 결제)180

최종 전환율 = 180 / 1,000 × 100 = 18.00

이렇게 푼다

  1. 단계마다 '그 행동을 한 사람 수' 를 센다.
  2. 채널별로 묶는다.
  3. 마지막 단계 ÷ 첫 단계 × 100.

이것만 피하면 된다

자세히

묻는 것 · 세로로 쌓인 이벤트를 가로 단계로 펼칠 줄 아는가.

풀이 순서

  1. 단계별로 COUNT(DISTINCT CASE WHEN ... THEN user_id END).
  2. 같은 유저가 같은 이벤트를 여러 번 남길 수 있으므로 DISTINCT 필수.
  3. 최종 전환율은 마지막 단계 ÷ 첫 단계.

정답 (MySQL)

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;

함정

이렇게 변형된다

“단계 간 전환율”(2→3, 3→4)로 바뀌면 분모를 직전 단계로 바꾸면 된다.

← Q1. 월별 신규 가입자와 결제 전환율Q3. 월별 매출 · 누적 · 전월 대비 →