SQL-每日一题【550.游戏玩法分析Ⅳ】

题目

Table: Activity

编写一个 SQL 查询,报告在首次登录的第二天再次登录的玩家的比率,四舍五入到小数点后两位。换句话说,您需要计算从首次登录日期开始至少连续两天登录的玩家的数量,然后除以玩家总数。

查询结果格式如下所示:

解题思路

前置知识

1.ROUND() 函数

ROUND() 函数用于把数值字段舍入为指定的小数位数。

语法

SELECT ROUND(column_name,decimals) FROM TABLE_NAME;

2.DATE_ADD()函数

DATE_ADD() 函数向日期添加指定的时间间隔。

语法

DATE_ADD(date,INTERVAL expr type)

date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。

知道了上述函数用法后我们来解决这道题

1.题目要求我们查询首次登录的玩家第二天再次登录的玩家的比率,我们先查询出首次登录的日期(最小日期)然后+1(不论表中存不存在这个日期,先把这个日期创建出来)

select player_id,date_add(min(event_date),interval 1 day) from activity group by player_id

2.where条件是表中存在这样一个id和日期(就是已经+1的日期,如果存在就符合条件,如果不存在就过滤掉)

where
        (player_id,event_date)
        in
        (select player_id,date_add(min(event_date),interval 1 day) from activity group by player_id)

3.查找存在的id统计结果/总的id数

select 
    round(count(distinct player_id)/(select count(distinct player_id) from activity),2 ) as fraction
    from
    activity

代码实现

select 
    round(count(distinct player_id)/(select count(distinct player_id) from activity),2 ) as fraction
    from
    activity
    where
        (player_id,event_date)
        in
        (select player_id,date_add(min(event_date),interval 1 day) from activity group by player_id)

运行结果

猜你喜欢

转载自blog.csdn.net/lucky_1314520/article/details/131599124
今日推荐