题解 | #计算用户的平均次日留存率#

计算用户的平均次日留存率

https://www.nowcoder.com/practice/126083961ae0415fbde061d7ebbde453

# 明确 第二天 还来的概率怎么求,第二天来了标记1,第二天没来标记0,对第二天的标记求平均值,就是第二天来的概率。
# 用到 窗口函数  加一个 向上平移方法lead。把第二次来的日期 向上平移一位 和 第一次来的日期对齐,可以比较出第二天是不是来了。和hive学习中连续几日访问的问题类似。
# 这样嵌套的查询,从里面写起。边写可以边输出检查。

select avg(if(datediff(date2,date1)=1,1,0))as avg_ret
from                                                                  # 日期是  前 减 后;
(select 
    date date1, 
    lead(date,1,0) over(partition by device_id order by date ) as date2  # 组内排序,向下是增大。
from 
    (select 
        distinct(device_id),
        date 
    from question_practice_detail
    )as table_distinct
)as table1;

# 通过以下这步,我们可以看见,表中有大量,一个设备同一天来了多次的情况,所以我们要去重。
# select 
# device_id,
# date date1, 
# lead(date,1,0) over(partition by device_id order by date ) as date2     # 组内排序,向下是增大。
# from question_practice_detail;
# 
# mysql> select datediff('2021-08-09','2021-08-10');
# +-------------------------------------+
# | datediff('2021-08-09','2021-08-10') |
# +-------------------------------------+
# |                                  -1 |
# +-------------------------------------+
# 1 row in set (0.01 sec)

# mysql> select datediff('2021-08-10','2021-08-09');
# +-------------------------------------+
# | datediff('2021-08-10','2021-08-09') |
# +-------------------------------------+
# |                                   1 |
# +-------------------------------------+
# 1 row in set (0.00 sec)
# 

全部评论

相关推荐

ResourceUtilization:差不多但是估计不够准确,一面没考虑到增长人口,另一方面也没考虑到能上大学的人数比例,不过我猜肯定只多不少
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务