mysql-面试题

 1.

mysql-面试题_第1张图片

mysql-面试题_第2张图片

这里我们可以看出有两种情况,要么活跃,要么不活跃,我的思路是统计出不活跃的, 并计算出他们所占比例,再用1减去他们所占比例,就可以得到留存率。大致思路就这样,具体代码后面补。下面代码为老师提供的一种查询代码,可供参考。

select t2.dt as dt, ifnull(round(new_user/dau,2), 0.00) as uv left rate
from(
    -- 每天的新用户数
    select dt,count(1) new_user
    from(
        -- 用户第一次登录时间
        select uid,min(date(in_time)) dt
        from tb_user_log
        group by uid) as t
    group by dt
) as 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
    ) as t
    group by dt
) as t2
on t1.dt = t2.dt

你可能感兴趣的:(mysql,数据库)