题解 | #每天的日活数及新用户占比#
每天的日活数及新用户占比
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想到把登入、登出的信息全部统计,然后进行去重,这样如果跨天的消息也会被保存。