题解 | #每份试卷每月作答数和截止当月的作答总数。#
每份试卷每月作答数和截止当月的作答总数。
http://www.nowcoder.com/practice/5f1cbe74c682485aa73e4c2b30f04a62
问题:请输出每份试卷每月作答数和截止当月的作答总数。
问题关键点在于累积求和。1.关键语句就是
sum(month_cnt) over(partition by exam_id order by start_month)
含义就是根据exam_id分组,根据start_month排序,然后进行累积sum求和
2.剩下的就是直接根据exam_id和date_format对时间类型修改成年和月,根据这两个分组后求和就行。
3.还能想到陷阱就是输出的月份是202001,应该%Y%m(大写的Y),小写的y输出的结果是2001。之前如果刷完全部题目的话这里应该不是问题。
以上。
SELECT exam_id, start_month, month_cnt,
SUM(month_cnt) OVER(PARTITION BY exam_id ORDER BY start_month)
FROM
(SELECT exam_id, DATE_FORMAT(start_time,'%Y%m') start_month,
COUNT(start_time) month_cnt
FROM exam_record
GROUP BY exam_id, date_format(start_time,'%Y%m')
) r1
ORDER BY exam_id, start_month