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

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

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


select t7.dt,t7.dau,ifnull(round(t5.new_user_cnt/t7.dau,2),0) as uv_new_ratio 
from (
# 查询每天新用户的数量new_user_cnt  
select t4.dt,count(distinct t4.uid) as new_user_cnt from (
select t3.uid,row_number() over(partition by t3.uid order by t3.dt) as rank_date
,t3.dt  
    from (
# 由于存在跨天登录的情况,所以将in_time和out_time用union拼接起来,生成登录记录的全表
select distinct t1.uid,date_format(t1.in_time,'%Y-%m-%d') as dt 
from tb_user_log as t1 
union 
select distinct t2.uid,DATE_FORMAT(t2.out_time,'%Y-%m-%d') as dt 
from tb_user_log as t2 ) t3 ) t4 
where t4.rank_date = 1 group by t4.dt ) t5 
right join 
(
# 查询每天用户数dau
select distinct t6.dt, count(t6.uid) over(partition by t6.dt) as dau 
from  (
# 由于存在跨天登录的情况,所以将in_time和out_time用union拼接起来,生成登录记录的全表
select distinct t1.uid,date_format(t1.in_time,'%Y-%m-%d') as dt 
from tb_user_log as t1 
union 
select distinct t2.uid,DATE_FORMAT(t2.out_time,'%Y-%m-%d') as dt 
from tb_user_log as t2 ) t6 ) t7 on t5.dt=t7.dt 
order by t7.dt

全部评论

相关推荐

吴offer选手:学到了,下次面试也放张纸在电脑上,不然老是忘记要说哪几个点
点赞 评论 收藏
分享
03-25 16:22
南华大学 Java
不敢追175女神:你是打了上千个招呼吧?😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务