题解 | #每月及截止当月的答题情况#
每月及截止当月的答题情况
http://www.nowcoder.com/practice/1ce93d5cec5c4243930fc5e8efaaca1e
题目分析
1、每月的试卷作答记录中月活用户数——count(distinct uid);
2、每月的试卷作答记录中新增用户数——min()over(),根据用户作答最小时间来判断是否新增用户,当作答时间=该用户所有作答时间时为新增,其余时间作答均不属于新增,可用窗口函数实现;
3、截止当月的单月最大新增用户数——max(sum())over(),先用sum()计算出每月的新增用户数,再用窗口函数找出最大值;
4、截止当月的累积用户数——sum(sum())over(),先用sum()计算出每月的新增用户数,再用窗口函数累计新增用户数;
5、结果按月份升序输出——order by。
答案参考
SELECT
start_month
,count(distinct uid)mau,sum(new)month_add_uv
,max(sum(new))over(order by start_month)max_monthe_add_uv
,sum(sum(new))over(order by start_month)cum_sum_uv
FROM
(SELECT
*,date_format(start_time,'%Y%m')start_month
,if(start_time=min(start_time)over(partition by uid),1,0)new
FROM
exam_record)a
GROUP BY
start_month
ORDER BY
start_month;