【场景】:截止到本行数据,统计数据结果、出每一行数据,对整体统计数据的影响
【分类】:聚合窗口函数
分析思路
(1)统计截止当月的作答总数
- [使用]:count(*) over(partition by exam_id order by date_format(start_time,'%Y%m'))
(2)输出每份试卷每月作答数和截止当月的作答总数
- [使用]:group by exam_id,start_month
或者直接使用
sum(count(*)) over(partition by exam_id order by date_format(start_time,'%Y%m'))
最终结果
select 查询结果 [试卷ID;月份;每月作答数;截止当月的作答总数]
from 从哪张表中查询数据[exam_record]
group by 分组条件 [用户ID;月份]
order by 对查询结果排序 [试卷ID、月份升序];
扩展
前往查看: MySQL 窗口函数
求解代码
方法一
with子句
with
main as(
#统计截止当月的作答总数
select
exam_id,
date_format(start_time,'%Y%m') as start_month,
count(*) over(partition by exam_id order by date_format(start_time,'%Y%m')) as cum_exam_cnt
from exam_record
)
#输出每份试卷每月作答数和截止当月的作答总数
select distinct
exam_id,
start_month,
count(start_month) as month_cnt,
cum_exam_cnt
from main
group by exam_id,start_month
方法二
sum(count(*)) 专用窗口函数
#输出每份试卷每月作答数和截止当月的作答总数
select
exam_id,
date_format(start_time,'%Y%m') as start_month,
count(*) as month_cnt,
sum(count(*)) over(partition by exam_id order by date_format(start_time,'%Y%m')) as cum_exam_cnt
from exam_record
group by exam_id,start_month