Active User Retention [Facebook SQL Interview Question]

HONG LEE ·2024년 6월 6일
0


https://datalemur.com/questions/user-retention
위 링크를 통해 해당 문제를 풀 수 있습니다.

나의 풀이

코드를 입력하세요
with m6 as(
SELECT user_id,
       TO_CHAR(event_date, 'MM') as month
FROM user_actions
where TO_CHAR(event_date, 'MM') = '06'
),
m7 as (
SELECT user_id,
       TO_CHAR(event_date, 'MM') as month
FROM user_actions
where TO_CHAR(event_date, 'MM') = '07'
)
select cast(m7.month as integer) as month,
       count(DISTINCT m6.user_id)
from m6 join m7 on m6.user_id = m7.user_id
group by cast(m7.month as integer)

여기서 내가 새로 알게 된점 1:
나는 MYSQL을 주로 공부하였고, POSTGRE는 잘 모른다.
DATE_FORMAT 함수를 POSTGRE에서는 TO_CHAR함수로 쓴다.

여기서 내가 새로 알게 된점 2:
문자열을 숫자로 바꿀 때
MYSQL: CAST(m7.month as INT)
또는 CONVERT(m7.month as INT)
POSTGRE: CAST(m7.month as INTEGER)
또눈 CAST(m7.month :: INTEGER)

다른 사람 풀이

코드를 입력하세요
with cte as (
SELECT User_id,event_type, event_date, EXTRACT(MONTH FROM event_Date) as mth
from user_actions
where event_date BETWEEN '06/01/2022' and '07/31/2022'
),
cte2 as (
Select * , lag(mth) over(PARTITION BY user_id order by event_date) as lst_mth
from cte)

select mth,
       count(DISTINCT user_id)
from cte2
where mth - lst_mth = 1
group by mth

여기서 내가 알게된점:
EXTRACT (MONTH FROM event_date) 를 하면 event_date에서 MONTH만 추출해 숫자 타입으로 반환함.

인상 깊었던 점:
lag 함수를 사용한게 인상이 깊었다.

0개의 댓글