♟️ 알고리즘/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  문법을 몰랐다.

 


📚문제