题解 | #每月及截止当月的答题情况#
每月及截止当月的答题情况
http://www.nowcoder.com/practice/1ce93d5cec5c4243930fc5e8efaaca1e
问题:请输出自从有用户作答记录以来,每月的试卷作答记录中月活用户数、新增用户数、截止当月的单月最大新增用户数、截止当月的累积用户数。结果按月份升序输出。
1,这道题的关键问题在于第二个字段如何求累积新增用户数。这里刷过之前“全部题目”中应该遇到这种类型的问题。需要使用逆向思维根据uid分组求最小的月份,则这个月份的uid就是本月的新增用户,然后和原始表格链接时月份相等,再对uid求和就是每个月的新增人数。
2.第二个关键问题是后面几个字段到本月为止累积求最大值和求和。用over()的方法实现,之前也出现过。
SELECT r2.start_month, c1, COUNT(r1.uid) month_add_uv,
MAX(count(r1.uid)) OVER(order by r2.start_month) max_month_add_uv,
SUM(count(r1.uid)) OVER(order by r2.start_month) cum_sum_uv
from
(SELECT uid, MIN(date_format(start_time,'%Y%m')) start_month
FROM exam_record
GROUP BY uid
) r1
RIGHT JOIN
(SELECT DATE_FORMAT(start_time,'%Y%m') start_month,
COUNT(DISTINCT uid) c1
FROM exam_record
GROUP BY date_format(start_time,'%Y%m')
) r2
ON r1.start_month=r2.start_month
GROUP BY r2.start_month, c1