본문 바로가기
문제풀이/SQL 문제풀이

DataLemur_Signup Activation Rate(Medium)

by yj-data 2026. 1. 14.

질문: 전체 아이디 중 email activation이 완료된 비율을 구하라

 

데이터셋: 

-- texts table columns: text_id, email_id, signup_action
-- emails table columns: email_id, user_id, signup_date
WITH confirmed AS (
  SELECT email_id, signup_action
  FROM texts
  WHERE signup_action = 'Confirmed'
),
   final_confirmed AS(
  SELECT t.email_id
        , (CASE WHEN c.signup_action = 'Confirmed' THEN 1 ELSE 0 END) AS confirmed_num
  FROM emails t
    LEFT JOIN confirmed c
    ON t.email_id = c.email_id
)
SELECT ROUND(SUM(confirmed_num)*1.0/COUNT(email_id),2) AS confirm_rate
FROM final_confirmed;

 

회고:

  • 나처럼 CTE 2개씩 써가면서 한 답도 틀린건 아닌 수준.
  • 어차피 마지막에 1,0 값 전체 중에 1의 비율을 구할거면 AVG() 로 해결하는 답도 봤다. 오.. 괜찮을듯.
  • CTE 2개씩 안쓰고 아예 CTE를 0개 쓴 예시도 많이 보이는데, 이거는 FROM ...JOIN 이쪽에서 냅다 조인하고 나서 SELECT로 해결하는거라 컴퓨팅 파워가 더 쓰일 것 같은 쿼리다. 물론 가독성도 CTE쓰는것 보다 떨어져 보이기도 하고.
  • 흠.. 그래도 내가 쓴 코드가 너무 길어보이긴 한다.