前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >游戏行业实战案例1:日活跃率分析

游戏行业实战案例1:日活跃率分析

作者头像
猴子数据分析
发布2022-05-19 12:20:17
5570
发布2022-05-19 12:20:17
举报
文章被收录于专栏:猴子数据分析猴子数据分析

【面试题】某游戏数据后台设有“登录日志”和“登出日志”两张表。

“登录日志”记录各玩家的登录时间和登录时的角色等级。

“登出日志”记录各玩家的登出时间和登出时的角色等级。

其中,“角色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”的数据:

代码语言:javascript
复制
where 日期 = '2022-08-13'

至少登录过游戏一次表示登录过游戏即可,“登录日志”记录玩家的登录信息,玩家有登录过游戏就会有记录。

而在“登出日志”中玩家登出信息有可能缺失,因此,为了避免漏算玩家,我们从“登录日志”取数据进行查询:

代码语言:javascript
复制
from 登录日志

如何计算玩家数呢?

计算玩家数即为计算玩家数量,而count()函数具有计数功能,因此我们使用count()函数来计算玩家数;玩家使用“角色id”唯一识别,一个“角色id”对应一位玩家,因此我们对“角色id”进行计数:

代码语言:javascript
复制
count(角色id)

由于玩家在一天中可以多次登录游戏,登录日志中会存在重复的“角色id”,为了计算不重复玩家数,我们还需要使用distinct子句去重“角色id”,即计算不重复玩家数为:

代码语言:javascript
复制
count(distinct 角色id) as 日活跃玩家数

将以上分析按SQL编写规范组合成完整的SQL语句即可计算出日活跃玩家数。

完整的SQL的书写方法:

代码语言:javascript
复制
select count(distinct 角色id) as 日活跃玩家数
from 登录日志
where 日期 = '2022-08-13';

查询结果如下:

2.次日留存率

因为次日留存率=次日仍登录的活跃玩家数/当日活跃玩家总数。

所以开服首日的次日留存率=开服次日(2022-08-14)仍登录的活跃玩家数/开服首日的活跃玩家总数。

开服首日的活跃玩家总数即开服首日游戏的DAU,在前面我们已经计算得出,现在我们来计算开服次日仍登录的活跃玩家数。

开服次日仍登录的活跃玩家数表示:开服首日登录过且在开服次日仍然登录的不重复玩家数。这里存在多个筛选条件:

1)从“登录日志”中筛选出开服次日(2022-08-14)登录的玩家:

代码语言:javascript
复制
select 角色id 
from 登录日志 
where 日期 = '2022-08-14';

2)并且玩家属于开服首日(2022-08-13)登录过的玩家:

代码语言:javascript
复制
and 角色id in (2022-08-13登录过的用户id)

2022-08-13登录过的玩家可以用以下SQL语句筛选出:

代码语言:javascript
复制
select 角色id 
from 登录日志 
where 日期 = '2022-08-13';

因此,从“登录日志”筛选开服次日仍登录的玩家的语句为:

代码语言:javascript
复制
select 角色id
from 登录日志
where 日期 = '2022-08-14' and 角色id in (
select 角色id 
from 登录日志 
where 日期 = '2022-08-13');

筛选了玩家后就可以计算不重复玩家数了,计算不重复玩家数使用count(distinct 角色id)。

因此,计算开服次日仍登录的活跃玩家数的完整SQL语句的书写方法为:

代码语言:javascript
复制
select count(distinct 角色id) as 次日仍登录的活跃玩家数
from 登录日志
where 日期 = '2022-08-14' and 角色id in (
select 角色id 
from 登录日志 
where 日期 = '2022-08-13');

查询结果如下:

现在,们在前面结果的基础上计算开服首日的次日留存率。

计算开服首日(2022-08-13)的活跃玩家总数的SQL的书写方法如下:

代码语言:javascript
复制
select count(distinct 角色id) 
from 登录日志 
where 日期 = '2022-08-13';

根据次日留存率的计算方法可知,计算次日仍登录的活跃玩家数的count(distinct 角色id)/计算首日登录的活跃用户数的count(distinct 角色id)即为次日留存率。

因此,可以将计算开服首日的活跃玩家总数的SQL语句带入计算开服次日仍登录的活跃玩家数的SQL语句中,进行除法运算。

完整SQL的书写方法:

代码语言:javascript
复制
select count(distinct 角色id)/(select count(distinct 角色id) from 登录日志 where 日期 = '2022-08-13') as 次日留存率
from 登录日志
where 日期 = '2022-08-14' and 角色id in (
select 角色id 
from 登录日志 
where 日期 = '2022-08-13');

查询结果如下:

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 猴子数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档