题解 | #每天的日活数及新用户占比#
每天的日活数及新用户占比
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
饿饿饿,点个外卖吃


