leetcode550. 遊戲玩法分析 報告在首次登錄的第2天再次登錄的玩家的分數

題目描述

Table: Activity

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| player_id    | int     |
| device_id    | int     |
| event_date   | date    |
| games_played | int     |
+--------------+---------+
(player_id,event_date)是此表的主鍵。
這張表顯示了某些遊戲的玩家的活動情況。
每一行是一個玩家的記錄,他在某一天使用某個設備註銷之前登錄並玩了很多遊戲(可能是 0)。
 

編寫一個 SQL 查詢,報告在首次登錄的第二天再次登錄的玩家的分數,四捨五入到小數點後兩位。換句話說,您需要計算從首次登錄日期開始至少連續兩天登錄的玩家的數量,然後除以玩家總數。

查詢結果格式如下所示:

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            |
+-----------+-----------+------------+--------------+

Result table:
+-----------+
| fraction  |
+-----------+
| 0.33      |
+-----------+
只有 ID 爲 1 的玩家在第一天登錄後才重新登錄,所以答案是 1/3 = 0.33

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/game-play-analysis-iv
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

解題思路

框架爲round((再次登錄用戶數)/(所有用戶數),2) as fraction

首次登陸後再次登錄用戶數:先取出首次登陸的用戶和日期,再連接Activity表,篩選出datediff=1的用戶數。

注意:b.min(event_date) 無法使用,min(event_date)需起別名。

代碼

# Write your MySQL query statement below
select round((select count(*) from Activity a join
    (select player_id, min(event_date) as first_date from Activity group by player_id) b
    on a.player_id=b.player_id
    where datediff(a.event_date,b.first_date)=1)/(select count(distinct player_id) from Activity),2) as fraction

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章