SQL数据分析实战(三):应用join语句计算玩家在线时长

接上篇,继续介绍Join语句。

在游戏行业,有一个通用的方法可以计算游戏用户的平均在线时长,即:日平均在线人数*24小时/日活跃用户数=日平均在线时长。

该方法有一定的参考意义,因为在线人数的计算单位是精确到秒或者分钟,日平均在线人数是每秒的平均在线人数,乘以24小时相当于一天内按小时计算的累计登陆人数,再除以日活跃用户数,接近于所有用户的平均在线时长。

用该方法计算出来的平均在线时长跟其他游戏横向对比时,有很重要的参考意义。但是,和实际计算出结果存在一定误差,尤其是当我们要对不同类型的用户(比如付费和免费用户)进行计算时,该公式就不能应用。

我们在埋点的时候,会跟开发人员沟通,直接通过程序来计算用户在线时长,但很多时候,开发因为排期等原因,总是把该埋点数据遗漏,并且,通常情况下,登入表和登出表为两张表。因此,我们只能通过玩家登入、登出的时间来计算在线时长。

本次就以某款游戏的登入、登出表数据为例,应用join语句来计算玩家平均在线时长数据。

1、案例表

  • 登入表:temp.sample_login,有data_date(登入日期)、character_id(角色ID)、login_time(登入时间)、row_id(同角色按时间排列的序号)


  • 登出表:temp.sample_logout,有data_date(登入日期)、character_id(角色ID)、logout_time(登出时间)、row_id(同角色按时间排列的序号)


2、思路

1)先计算每个帐号每天的总在线时长

i. 在登入临时表中增加每次登入的下一次时间

ii. 将登入时间和登出时间整合在一张表

iii. 检查异常值,并剔除异常值

iv. 将登出时间字段-登入时间字段,并汇总统计每天每个帐号的平均在线时长

2)计算所有帐号每天的平均在线时长


3、计算步骤

a) 在登入临时表中增加每次登入的下一次时间


b) 将登入时间和登出时间整合在一张表


c) 检查数据,我们来看某个帐号的登入、登出记录,发现该帐号出现两次相同的登入记录,且相邻登出记录的时间为5分钟,和开发人员确认,是由于进入游戏后5分钟之内没有任何操作,且没有退出游戏的情况下,程序会自动写入一条登出记录。


d) 剔除异常值,将程序自动写入的登出记录剔除(时间差为300秒的记录)


e) 将登出时间字段-登入时间字段,并汇总统计每天每个帐号的平均在线时长


f) 在每天每个帐号的平均在线时长的基础上,计算所有帐号每天的平均在线时长。


假如我们没有剔除异常值,直接将登出时间-登入时间并汇总统计,玩家每天的平均在线时长为4.3小时,而剔除异常值以后的人均在线时长为3.1小时,相差了1.2小时。


使用Join语句对行和列的灵活转换,您掌握了吗?


如果你认为我写的对你有帮助,不妨关注微信公众号 “数据驱动游戏”。

发布于 2021-03-22 10:05

文章被以下专栏收录