题解 | #每月及截止当月的答题情况#
每月及截止当月的答题情况
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