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문 사용
