Leetcode 解題紀錄 SQL 50 - 550. Game Play Analysis IV
Leetcode 解題紀錄 SQL 50 - 550. Game Play Analysis IV
題目背景
這題的目標是計算 玩家首次登入後第二天是否再次登入的比例,並將結果四捨五入至小數點後兩位。
資料表結構
1 | Table: Activity |
解釋:
- Primary Key:
(player_id, event_date)
,代表每位玩家在某天的唯一活動記錄。 - 數據描述:
player_id
是玩家的 ID,event_date
是登入日期,games_played
是當天玩的遊戲數量。
題目要求
計算 首次登入後第二天有再次登入的玩家比例。若符合條件的玩家數量為 1,總玩家數為 3,則結果為:1 / 3 = 0.33
。
解法:CTE 實現
1 | WITH FirstLogin AS ( |
解題步驟解析
1. 獲取首次登入日期 (FirstLogin
)
利用 MIN(event_date)
找出每個玩家的首次登入日期:
1 | WITH FirstLogin AS ( |
2. 確認首次登入後第二天是否有登入 (NextDayLogin
)
將首次登入日期與原始資料表 Activity
做連結,篩選出在 first_login_date + 1
有再次登入的玩家:
1 | WITH NextDayLogin AS ( |
3. 計算比例並四捨五入
計算符合條件的玩家數量與總玩家數比例,並用 ROUND
將結果四捨五入至小數點後兩位:
1 | SELECT |
範例數據與輸出
輸入數據:
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 |
輸出結果:
fraction |
---|
0.33 |
小結
這題的核心在於:
- 找出每個玩家的首次登入日期。
- 檢查首次登入的第二天是否有登入記錄。
- 計算符合條件玩家數與總玩家數的比例,並格式化結果。
希望這篇文章能幫助你解題,並對 SQL 的聚合函數與日期操作有更深入的理解!
本部落格所有文章除特別聲明外,均採用CC BY-NC-SA 4.0 授權協議。轉載請註明來源 Nalson!
評論
ValineDisqus