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/
'SQL 코드카타' 카테고리의 다른 글
연도 별 평균 미세먼지 농도 조회하기 (0) | 2024.10.08 |
---|---|
노선별 평균 역 사이 거리 조회하기 (0) | 2024.10.08 |
1661. Average Time of Process per Machine (0) | 2024.05.03 |
197. Rising Temperature (0) | 2024.05.02 |
상품을 구매한 회원 비율 구하기 (0) | 2024.04.19 |