질문: 전체 아이디 중 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쓰는것 보다 떨어져 보이기도 하고.
- 흠.. 그래도 내가 쓴 코드가 너무 길어보이긴 한다.
'문제풀이 > SQL 문제풀이' 카테고리의 다른 글
| DataLemur_Odd and Even Measurements(Medium) (0) | 2026.01.13 |
|---|---|
| DataLemur_Histogram of Tweets(Easy) (0) | 2026.01.12 |
| SQL 코딩테스트 준비 사이트 비교 (0) | 2025.12.02 |
| SQL/프로그래머스 - 재귀 SQL (0) | 2025.11.27 |
| SQL/프로그래머스 - 자동차 대여 기록 별 대여 금액 구하기(CAST, REPLACE, COALESCE) (0) | 2025.11.27 |