https://leetcode.com/problems/confirmation-rate/?envType=study-plan-v2&envId=top-sql-50
처음에는 JOIN을 사용하지 않고 Confirmations 테이블에 대해서만 쿼리를 작성했다.
근데 그렇게 되면 signup은 했는데 confirmation을 하지 않은 유저에 대해서 볼 수가 없더라고
그래서 Signup 테이블을 기준으로 Confirmations 테이블을 조인해주었다.
SELECT s.user_id,
COUNT(c.user_id) AS total,
COUNT(CASE WHEN action = 'confirmed' THEN c.user_id END) AS accepted
FROM Signups s
LEFT JOIN Confirmations c ON s.user_id = c.user_id
GROUP BY s.user_id
c 테이블의 유저 아이디 수 = 해당 유저가 제출한 건수
action이 confirm인 경우의 c 테이블의 유저 아이디 수 = 해당 유저가 제출한 건수중 confirm된 건수
하지만 이 2개 조건을 냅다 나눠줄 경우 0/0 이 되는 경우가 생긴다
왜냐면 한번도 제출하지 않은 유저의 total은 0이기 때문
따라서 이 경우를 먼저 처리해주고
나머지 경우에 대해 2개 조건을 나눈 값을 반환하는 CASE문을 작성했다.
SELECT s.user_id,
CASE WHEN
COUNT(c.user_id) = 0 THEN 0
ELSE ROUND(COUNT(CASE WHEN action = 'confirmed' THEN c.user_id END)/COUNT(c.user_id), 2)
END AS confirmation_rate
FROM Signups s
LEFT JOIN Confirmations c ON s.user_id = c.user_id
GROUP BY s.user_id
'SQL > 문제풀이' 카테고리의 다른 글
[LeetCode] monthly-transactions (0) | 2024.03.04 |
---|---|
[LeetCode] students-and-examinations 📌 (0) | 2024.03.04 |
[LeetCode] average-time-of-process-per-machine (0) | 2024.03.04 |
[LeetCode] customers-who-bought-all-products (0) | 2024.03.04 |
[LeetCode] Product Sales Analysis 3 (0) | 2024.03.04 |