문제 출저
https://leetcode.com/problems/confirmation-rate/?envType=study-plan-v2&envId=top-sql-50
문제 풀이
각 유저의 확인 비율을 구해야 합니다. 확인 비율은 확인(confirmed) / 전체 메일 입니다.
모든 유저를 나타내기 위해서 left join을 합니다.
Singups, Confirmations 조인하여 user_id로 그룹화 합니다.
집계함수 sum과 조건문 if를 이용하여 confirmed의 갯수를 구합니다.
count를 통해 전체 갯수를 구합니다.
round를 통해 소수점 2자리를 표시하도록 합니다.
SQL
select
s.user_id,
round(sum(if(c.action = 'confirmed', 1, 0)) / count(*), 2)
as confirmation_rate
from
signups as s
left join
confirmations as c on s.user_id = c.user_id
group by
s.user_id
-- with confirmedaction as (
-- select
-- s.user_id,
-- count(c.user_id) as count
-- from
-- Signups as s
-- left join
-- Confirmations as c on s.user_id = c.user_id
-- and c.action = 'confirmed'
-- group by
-- s.user_id
-- ),
-- allaction as (
-- select
-- s.user_id,
-- count(s.user_id) as count
-- from
-- Signups as s
-- left join
-- Confirmations as c on s.user_id = c.user_id
-- group by
-- s.user_id
-- )
-- select
-- c.user_id,
-- round(c.count / a.count, 2) as confirmation_rate
-- from
-- confirmedaction as c
-- join
-- allaction as a on c.user_id = a.user_id