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/