SQL 코드카타

550. Game Play Analysis IV

여연찌 2024. 5. 31. 11:27
WITH cte_login AS(
  SELECT player_id
       , DATEDIFF(event_date, MIN(event_date) OVER(PARTITION BY player_id)) = 1 as login
  FROM activity
)
SELECT ROUND(SUM(login) / COUNT(DISTINCT player_id), 2) as fraction
FROM cte_login

 

DATEDIFF(event_date, MIN(event_date) OVER(PARTITION BY player_id))=1

event_date 와 player_id의 처음 로그인한 날짜 사이의 일수 계산이 1일 때 라는 조건이 True 면 1, False 면 0으로 표기된다.

 

* MIN(event_date) OVER(PARTITION BY player_id)

player_id 별로 최초 로그인 한 날짜구하기

 

* event_date 와 player_id의 처음 로그인한 날짜 사이의 일수 계산이 1일 때

= 연속으로 로그인 했을 때

 

* SQL 에서 True 면 1, False 면 0

 

그럼 이와 같은 형태로 반환된다.

 

 

 

 

 

 

이렇게 나온 테이블로

SUM(login) 

로 연속으로 로그인한 player_id 의 숫자를 세어주고

 

이렇게 나온 결과를 문제에서 요구한데로

2일 연속으로 로그인한 사용자 수 / 전체 사용자 수 를 구해준다.

 

 

 


참조: https://leetcode.com/problems/game-play-analysis-iv/description/