题解 | #每份试卷每月作答数和截止当月的作答总数。#

每份试卷每月作答数和截止当月的作答总数。

http://www.nowcoder.com/practice/5f1cbe74c682485aa73e4c2b30f04a62

SQL34 每份试卷每月作答数和截止当月的作答总数

题目主要信息:

  • 输出每份试卷每月作答数和截止当月的作答总数

问题拆分:

  • 求每份试卷每个月的作答数,要以exam_id,开始作答时间的月份进行分组。group by exam_id, month(start_time) 知识点:group by
  • 直接获取试卷ID、作答月份。
  • 对每组开始作答时间计数得到每份试卷每个月的作答数。知识点:count()
  • 以试卷分组,月份递增获取每份试卷每个月的累计和。sum(count(start_time)) over(partition by exam_id order by month(start_time)) as cum_exam_cnt 知识点:sum()over()、count()、partition by、order by

代码:

select exam_id, 
       date_format(start_time, '%Y%m') as start_month,
       count(start_time) as month_cnt,
       sum(count(start_time)) over(partition by exam_id order by month(start_time)) as cum_exam_cnt
from exam_record
group by exam_id, month(start_time)
孤帆远影碧空尽 文章被收录于专栏

牛客网各类题单题解~

全部评论
month(start_time)会报错,改成DATE_FORMAT(start_time, '%Y%m')
3 回复 分享
发布于 2022-05-07 14:27
select exam_id,DATE_FORMAT(start_time,'%Y%m'),count(start_time), SUM(count(start_time))OVER(partition by exam_id order by DATE_FORMAT(start_time,'%Y%m')) from exam_record group by exam_id,DATE_FORMAT(start_time,'%Y%m') 这么写!就是用MONTH()函数导致的分组问题!
点赞 回复 分享
发布于 2022-05-04 11:04
有报错
点赞 回复 分享
发布于 2022-02-28 17:22
请教一下,为什么“sum(count(start_time)) over(partition by exam_id order by month(start_time)) as cum_exam_cnt”中还需要partition by exam_id,下面的group by应该再select之前已经执行了?
点赞 回复 分享
发布于 2022-02-27 06:30

相关推荐

11-27 21:29
已编辑
武汉理工大学 Java
点赞 评论 收藏
分享
面了100年面试不知...:今年白菜这么多,冬天可以狂吃了
点赞 评论 收藏
分享
评论
15
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务