题解 | #每月及截止当月的答题情况#
每月及截止当月的答题情况
https://www.nowcoder.com/practice/1ce93d5cec5c4243930fc5e8efaaca1e
# 计算每月的月活用户数,其他都以此推算而来 # 难点在于新增用户,需要模仿矩阵 WITH temp_0 AS( SELECT uid, exam_id, DATE_FORMAT(start_time, "%Y%m") start_month, # 定义新增用户,将单个用户首次登录的时间定义为最初时间,只有等于该时间的才算是首次登录1,其他都是老用户登录 IF(start_time = MIN(start_time) OVER(PARTITION BY uid), 1, 0) first_time FROM exam_record ) # 查询,直接统计月活用户数,对每月的首次登录的用户数求和得到新增用户数,然后根据新增用户数类推出后两个字段 SELECT start_month, COUNT(DISTINCT uid) mau, SUM(first_time) month_add_uv, MAX(SUM(first_time)) OVER(ORDER BY start_month) max_month_add_uv, SUM(SUM(first_time)) OVER(ORDER BY start_month) cum_sum_uv FROM temp_0 GROUP BY start_month