TIL/SQL

리트코드| Confirmation Rate (My SQL)

jojoon2786 2024. 9. 4. 17:08

 

나의 풀이)

with A as (
select a.user_id,
           b.action,
           case when b.action = 'confirmed' then 1
                    else 0 end as num
from Signups a left join Confirmations b on a.user_id = b.user_id)

select user_id, sum(num)/count(*) as 'confirmation_rate'
from A
group by user_id

Signups에만 존재하는 user_id가 있었기 때문에 left join을 해주었다.

case when문을 사용하여 confirmed 인 경우에 1 아닌 경우 0을 주어

본 쿼리에서 sum()을 사용해 확정된 갯수를 구해주었다.

 

튜터님의 코드)

-- #로그인 시도횟수
-- with sub1 as (
-- select
--     user_id,
--     count(*) as trials,
--     count(case when action = 'timeout' then 1 end) as timeout,
--     count(case when action = 'confirmed' then 1 end) as confirmed
-- from Confirmations
-- group by 1)

-- #회원인데 로그인시도를 한번도 안한사람을 null로 처리 ----> 조인시 고려사항 두 가지(left/cross/inner, on조건)
-- select
--     a.user_id,
--     case
--         when b.user_id is null then 0.00
--     else round(b.confirmed/b.trials, 2) end as confirmation_rate
-- from Signups as a
-- left join sub1 as b on a.user_id = b.user_id

 

배운점)

특정조건이 달린 경우 case when문
특정 조건이 둘 중 하나인 경우 if문 사용