♟️ 알고리즘/Leetcode
[MySQL][Leet Code] 1934. Confirmation Rate (Medium)
Jerry_K
2025. 2. 18. 15:52
https://leetcode.com/problems/confirmation-rate/?envType=study-plan-v2&envId=top-sql-50
🗒️SQL 코드 풀이
SELECT S.user_id,
ROUND
(
COALESCE(
AVG
(
CASE WHEN c.action = 'confirmed' THEN 1
ELSE 0
END
),0
),2
)
AS confirmation_rate
FROM Signups S
LEFT JOIN Confirmations C
ON S.user_id = C.user_id
GROUP BY S.user_id
1. Signups 테이블을 기준으로 Confirmations 테이블을 LEFT JOIN 해준다.
- 각 테이블에 user_id가 같은 것 기준으로 병합
2. 이후 GROUP BY로 user_id 별 그룹화를 해준다.
- 이때 user_id는 Signups 테이블을 기준
3. SELECT 문을 작성
- CASE WHEN을 이용해서 action의 값을 숫자형으로 바꿔줌 (평균내기 위해)
- 이후 AVG로 평균을 내줌
- NULL 값 같은 경우 0으로 대체
- 소수점 2자리까지 출력
📌 문제 코멘트
아래는 내가 풀이한 코드이다.
SELECT S.user_id ,
ROUND(AVG(COALESCE(action_fixed,0)) ,2) confirmation_rate
FROM Signups S
LEFT JOIN
(
SELECT *,
CASE
WHEN action = 'timeout' THEN 0
WHEN action = 'confirmed' THEN 1
END AS action_fixed
FROM Confirmations
) C
ON S.user_id = C.user_id
GROUP BY S.user_id
- LEFT JOIN을 좀 더 깔끔하게 쓰면 좋을 것 같다.
- 이번 풀이를 했을 때 , CASE / WHEN / THEN / ELSE /END 문법을 몰랐다.