题解 | #每天的日活数及新用户占比#
每天的日活数及新用户占比
http://www.nowcoder.com/practice/dbbc9b03794a48f6b34f1131b1a903eb
1.首先因为隔夜在线算两天的活跃,所以union要将in_time和out_time合并成一列
2.按照每个用户分组然后以dt为正序安排一个序号,该用户秩序为1的那一天即是他成为新用户的那一天
3.计算每日活跃度人数时一个人不能重复算,因此要 distinct uid,新用户就是把该日秩序为1的那些用户进行统计
SELECT dt,count(DISTINCT uid) dau,
ROUND(sum(if(act_rank=1,1,0))/count(DISTINCT uid),2)
FROM
(
SELECT uid,dt,
DENSE_RANK()over(partition by uid order by dt) act_rank
FROM
(
SELECT uid,date(in_time) dt
FROM tb_user_log
UNION
SELECT uid,date(out_time) dt
FROM tb_user_log
)t1
)t2
GROUP BY dt
ORDER BY dt;