题解 | #每天的日活数及新用户占比#
每天的日活数及新用户占比
https://www.nowcoder.com/practice/dbbc9b03794a48f6b34f1131b1a903eb
# 组合两个表的记录时间,计算每个用户的最早日期(用来判断是否是新用户) # WITH temp_0 AS( # 临时表0 组合两个不同的时间到一列 SELECT uid, DATE_FORMAT(in_time, '%Y-%m-%d') _date FROM tb_user_log UNION SELECT uid, DATE_FORMAT(out_time, '%Y-%m-%d') _date FROM tb_user_log ), temp_1 AS( # 临时表1 开窗函数,找到每个用户最早的登录日期 SELECT uid, _date, MIN(_date) OVER(PARTITION BY uid) first_date FROM temp_0 ), temp_2 AS( # 临时表2 分组语句。根据日期分组,求得每天的活跃数,结合求和聚合函数求得每天活跃的是新用户的数量 SELECT _date, COUNT(DISTINCT uid) dau, SUM(IF(_date = first_date, 1, 0)) new_dau FROM temp_1 GROUP BY _date ) # 主查询简单除法即可 SELECT _date dt, dau, ROUND(new_dau/dau, 2) uv_new_ratio FROM temp_2 ORDER BY dt
饿饿饿,点个外卖吃