當前位置: 華文問答 > 遊戲

遊戲行業實戰案例1:日活躍率分析

2022-05-03遊戲

【面試題】 某遊戲數據後台設有「登入日誌」和「登出日誌」兩張表。

「登入日誌」記錄各玩家的登入時間和登入時的角色等級。

「登出日誌」記錄各玩家的登出時間和登出時的角色等級。

其中,「角色id」欄位唯一辨識玩家。

遊戲開服前兩天(2022-08-13至2022-08-14)的角色登入和登出日誌如下

一天中,玩家可以多次登入登出遊戲,請使用SQL分析出以下業務問題:

分析開服首日(2022-08-13),遊戲的DAU(日活躍玩家數)和次日留存率(次日仍登入的活躍玩家數/當日活躍玩家總數)

【解題思路】

問題1: 分析開服首日(2022-08-13),遊戲的DAU(日活躍玩家數)和次日留存率(次日仍登入的活躍玩家數/當日活躍玩家總數)

1.計算開服首日遊戲的DAU(日活躍玩家數)

遊戲的DAU(日活躍玩家數),第一步就是要明確什麽是日活躍玩家數,日活躍玩家數表示當日至少登入過遊戲一次的不重復玩家數。

根據題意可知,當日即為開服首日(2022-08-13),因此,我們要用where子句篩選出日期為「2022-08-13」的數據:

1 where 日期 = '2022-08-13'

至少登入過遊戲一次表示登入過遊戲即可,「登入日誌」記錄玩家的登入資訊,玩家有登入過遊戲就會有記錄。

而在「登出日誌」中玩家登出資訊有可能缺失,因此,為了避免漏算玩家,我們從「登入日誌」取數據進行查詢:

1 from 登入日誌

如何計算玩家數呢?

計算玩家數即為計算玩家數量,而count()函式具有計數功能,因此我們使用count()函式來計算玩家數;玩家使用「角色id」唯一辨識,一個「角色id」對應一位玩家,因此我們對「角色id」進行計數:

1 count(角色id)

由於玩家在一天中可以多次登入遊戲,登入日誌中會存在重復的「角色id」,為了計算不重復玩家數,我們還需要使用distinct子句去重「角色id」,即計算不重復玩家數為:

1 count(distinct 角色id) as 日活躍玩家數

將以上分析按SQL編寫規範組合成完整的SQL語句即可計算出日活躍玩家數。

完整的SQL的書寫方法:

1 select count(distinct 角色id) as 日活躍玩家數 2 from 登入日誌 3 where 日期 = '2022-08-13';

查詢結果如下:

2.次日留存率

因為次日留存率=次日仍登入的活躍玩家數/當日活躍玩家總數。

所以開服首日的次日留存率=開服次日(2022-08-14)仍登入的活躍玩家數/開服首日的活躍玩家總數。

開服首日的活躍玩家總數即開服首日遊戲的DAU,在前面我們已經計算得出,現在我們來計算開服次日仍登入的活躍玩家數。

開服次日仍登入的活躍玩家數表示:開服首日登入過且在開服次日仍然登入的不重復玩家數。這裏存在多個篩選條件:

1)從「登入日誌」中篩選出開服次日(2022-08-14)登入的玩家:

1 select 角色id 2 from 登入日誌 3 where 日期 = '2022-08-14';

2)並且玩家屬於開服首日(2022-08-13)登入過的玩家:

1 and 角色id in (2022-08-13登入過的使用者id)

2022-08-13登入過的玩家可以用以下SQL語句篩選出:

1 select 角色id 2 from 登入日誌 3 where 日期 = '2022-08-13';

因此,從「登入日誌」篩選開服次日仍登入的玩家的語句為:

1 select 角色id 2 from 登入日誌 3 where 日期 = '2022-08-14' and 角色id in ( 4 select 角色id 5 from 登入日誌 6 where 日期 = '2022-08-13');

篩選了玩家後就可以計算不重復玩家數了,計算不重復玩家數使用count(distinct 角色id)。

因此,計算開服次日仍登入的活躍玩家數的完整SQL語句的書寫方法為:

1 select count(distinct 角色id) as 次日仍登入的活躍玩家數 2 from 登入日誌 3 where 日期 = '2022-08-14' and 角色id in ( 4 select 角色id 5 from 登入日誌 6 where 日期 = '2022-08-13');

查詢結果如下:

現在,們在前面結果的基礎上計算開服首日的次日留存率。

計算開服首日(2022-08-13)的活躍玩家總數的SQL的書寫方法如下:

1 select count(distinct 角色id) 2 from 登入日誌 3 where 日期 = '2022-08-13';

根據次日留存率的計算方法可知,計算次日仍登入的活躍玩家數的count(distinct 角色id)/計算首日登入的活躍使用者數的count(distinct 角色id)即為次日留存率。

因此,可以將計算開服首日的活躍玩家總數的SQL語句帶入計算開服次日仍登入的活躍玩家數的SQL語句中,進行除法運算。

完整SQL的書寫方法:

1 select count(distinct 角色id)/(select count(distinct 角色id) from 登入日誌 where 日期 = '2022-08-13') as 次日留存率 2 from 登入日誌 3 where 日期 = '2022-08-14' and 角色id in ( 4 select 角色id 5 from 登入日誌 6 where 日期 = '2022-08-13');

查詢結果如下:


即開服首日(2022-08-13)的次日留存率為75%。


案例數據下載途徑: