inblog logo
|
silver
    SQL문제풀기

    [SQL문제풀기] Game Play Analysis IV

    silver's avatar
    silver
    Oct 28, 2025
    [SQL문제풀기] Game Play Analysis IV
    Contents
    문제MySQL

    문제

    Game Play Analysis IV - LeetCode
    Can you solve this real interview question? Game Play Analysis IV - Table: Activity +--------------+---------+ | Column Name | Type | +--------------+---------+ | player_id | int | | device_id | int | | event_date | date | | games_played | int | +--------------+---------+ (player_id, event_date) is the primary key (combination of columns with unique values) of this table. This table shows the activity of players of some games. Each row is a record of a player who logged in and played a number of games (possibly 0) before logging out on someday using some device. Write a solution to report the fraction of players that logged in again on the day after the day they first logged in, rounded to 2 decimal places. In other words, you need to determine the number of players who logged in on the day immediately following their initial login, and divide it by the number of total players. The result format is in the following example.   Example 1: Input: Activity table: +-----------+-----------+------------+--------------+ | player_id | device_id | event_date | games_played | +-----------+-----------+------------+--------------+ | 1 | 2 | 2016-03-01 | 5 | | 1 | 2 | 2016-03-02 | 6 | | 2 | 3 | 2017-06-25 | 1 | | 3 | 1 | 2016-03-02 | 0 | | 3 | 4 | 2018-07-03 | 5 | +-----------+-----------+------------+--------------+ Output: +-----------+ | fraction | +-----------+ | 0.33 | +-----------+ Explanation: Only the player with id 1 logged back in after the first day he had logged in so the answer is 1/3 = 0.33
    Game Play Analysis IV - LeetCode
    https://leetcode.com/problems/game-play-analysis-iv/description/?envType=study-plan-v2&envId=top-sql-50
    Game Play Analysis IV - LeetCode

    MySQL

    내가 작성한 정답

    with a as (select player_id, row_number() over(partition by player_id order by event_date asc) rn, event_date from Activity) select round(count(distinct a.player_id) / (select count(distinct player_id) from Activity),2) fraction from a a left join a b on a.rn+1 = b.rn and a.player_id = b.player_id where date_add(a.event_date, interval 1 day) = b.event_date; and a.rn = 1;
    Share article

    silver

    RSS·Powered by Inblog