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

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

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

# 虽然嵌套的表有点多,但是从逻辑上来说自己觉得非常清晰:
# 1.计算用户第一次登录的时间
# 2.根据1计算每天的新用户数
# 3.计算每日活跃用户数
# 4.把每日活跃用户数和每天的新用户数做连接,连接条件是日期
# 5.计算新用户数/活跃用户数,因为连接的两个表里面都已经按照日期分组了,所以连接后的表不需要再分组了

select t2.dt,dau,ifnull(round(new_user/dau,2),0) uv_new_ratio
from(
    -- 每天的新用户数
    select dt,count(1) new_user
    from(
        -- 用户第一次登录时间
        select uid,min(date(in_time)) dt
        from tb_user_log
        group by uid)t
    group by dt
)t1
-- 因为有可能某天没有新用户数,因此要右连接
right join(
    -- 每日活跃用户数
    select dt,count(distinct uid) dau
    from(
        select uid,date(in_time) dt from tb_user_log  -- 先在里面date()
        union all
        select uid,date(out_time) dt from tb_user_log
    )t
    group by dt
)t2
on t1.dt=t2.dt


全部评论

相关推荐

04-25 19:29
已编辑
宁波大学 运营
被普调的六边形战士很高大:你我美牛孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务