[leetcode]550. Game Play Analysis IV⭐

김준석·2024년 4월 12일

코딩테스트 - SQL

목록 보기
87/96

문제

https://leetcode.com/problems/game-play-analysis-iv/description/?envType=study-plan-v2&envId=top-sql-50

포인트!
1. 처음 로그인한 event_date, 이틀연속 로그인한 부분을 잘 캐치해야 됨.

코드

WITH N_D AS( 
    SELECT
        player_id, event_date,
        RANK() OVER(PARTITION BY player_id ORDER BY event_date) AS first_day,
        LEAD(event_date,1) OVER(PARTITION BY player_id ORDER BY player_id) AS next_day
    FROM
        Activity
),
N_D2 AS(
    SELECT
        player_id, event_date, first_day, next_day,
        CASE
            WHEN first_day = 1 AND DATEDIFF(next_day,event_date) = 1 THEN 1
            ELSE 0
        END AS cnt
    FROM
        N_D
)
SELECT
    ROUND(SUM(cnt)/COUNT(DISTINCT player_id),2) AS fraction 
FROM
    N_D2

풀이 후기

  1. N_D CTE :
    먼저 RANK(), LEAD() 함수로 첫 로그인 컬럼과, 이후 로그인 날짜를 구해준다.

  2. N_D2 CTE :
    first_day = 1 (첫 로그인)
    DATEDIFF(next_day, event_date) = 1 (차이가 하루나는 day)
    두 조건을 기준으로 카운팅

  3. 최종 식
    카운팅이 1인 플레이어의 수 /플레이어의 수

다시한번 풀어보면 좋을 듯.
아주 재미있었다.

0개의 댓글