题解 | #每天的日活数及新用户占比#
每天的日活数及新用户占比
https://www.nowcoder.com/practice/dbbc9b03794a48f6b34f1131b1a903eb
select time, count(distinct t.uid) dau, round(sum(if(time=first_day,1,0))/count(distinct t.uid),2) uv_new_ratio from ( select uid,date(in_time) time from tb_user_log union select uid,date(out_time) time from tb_user_log ) t left join ( select uid,min(date(in_time)) first_day from tb_user_log group by uid ) f on f.uid=t.uid group by time order by time
(1)找到每个用户登陆的第一天作为first_day
(2)之后将用户的in_time和end_time进行分开后UNION去除重复值(这样可以将原来in_time和end_time跨天的记录变成两条记录)
(3)按照时间进行GROUP BY,之后进行DINSTINCT uid就是每天的活跃用户数(这里也可以不使用DISTINCT,因为在UNION的时候已经去除重复值了)。之后计算每天中新用户数量即可。