[LeetCode-SQL 50] 550. Game Play Analysis IV

코린이·2025년 6월 2일

SQL 문제 풀이 (MySQL)

목록 보기
68/96

❓ 문제

Activity
+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| player_id    | int     |
| device_id    | int     |
| event_date   | date    |
| games_played | int     |
+--------------+---------+

(player_id, event_date)는 이 테이블의 기본 키(고유 값을 가진 열의 조합)입니다.
이 테이블은 일부 게임 플레이어의 활동을 보여줍니다.
각 행은 언젠가 어떤 기기를 사용하여 로그인하여 여러 게임(0일 수도 있음)을 플레이한 후 로그아웃한 플레이어의 기록입니다.

처음 로그인한 날의 다음 날에 다시 로그인한 플레이어의 비율을 소수점 둘째 자리에서 반올림하여 보고하는 솔루션을 작성하세요. 즉, 첫 로그인 날짜부터 최소 이틀 연속 로그인한 플레이어 수를 세고 그 수를 전체 플레이어 수로 나누어야 합니다.

자세한 문제 내용은 사이트 참고...


❗️ 문제 풀이

WITH TMP_TB_1 AS (
    SELECT 
        player_id
        , MIN(event_date) AS first_login
    FROM Activity
    GROUP BY player_id
),
TMP_TB_2 AS (
    SELECT
        A.player_id
    FROM Activity A JOIN TMP_TB_1 B
        ON A.player_id = B.player_id
        AND A.event_date = DATE_ADD(B.first_login, INTERVAL 1 DAY)
    WHERE B.player_id IS NOT NULL
)
SELECT
    ROUND(COUNT(DISTINCT B.player_id)/COUNT(DISTINCT A.player_id), 2) AS fraction
FROM TMP_TB_1 A LEFT JOIN TMP_TB_2 B
    ON A.player_id = B.player_id
;

🔗 Reference

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

0개의 댓글