题解 | #每天的日活数及新用户占比#

每天的日活数及新用户占比

https://www.nowcoder.com/practice/dbbc9b03794a48f6b34f1131b1a903eb

select t1.dt,user_cnt as dau,cast(if(new_user_cnt is null,0,new_user_cnt)/user_cnt as decimal(10,2)) as uv_new_ratio from 
(
select dt,count(uid) user_cnt from (
    # 若要计算跨天情况 则需要把in_time 和out_time 分隔开来 去重 这样若隔天了 也有值
    select uid,date(in_time) dt from tb_user_log
    union
    select uid,date(out_time) dt from tb_user_log
) as t_user_info
group by dt
) as t1
left join (
select dt,count(*) as new_user_cnt from (
    # 首先需要算出每天的新用户 通过用户登录情况算出
    select uid,min(date(in_time)) dt from tb_user_log group by uid
) as t_new_user_cnt
group by dt
) as t2 
on t1.dt = t2.dt
order by dt;

思路

一、主要算的是新用户,故需要统计新用户信息,就是该用户第一次登录的信息;

二、跨天的信息也要更新,所以i想到把登入、登出的信息全部统计,然后进行去重,这样如果跨天的消息也会被保存。

全部评论

相关推荐

04-17 18:32
门头沟学院 Java
野猪不是猪🐗:他跟你一个学校,你要是进来之后待遇比他好,他受得了?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务