明确需求:
计算当月完成试卷数不小于3的用户,统计其爱作答的类别
当月均完成试卷数:count(当月提交记录不为null)/当月(1)
统计爱作答的类别:试卷名称 作答次数
(题目虽然写的是“月均完成试卷数不少于3的用户爱作答的类别”,但题目详述里面有这个*“当月均”**,即计算的是当月(本题默认9月,其他月份不考虑)*
思路拆解:
- 第一步:剔除未完成的记录,以uid分组,计算每个用户完成试卷数并进行筛选,得出用户名单
- 第二步:根据第一步的名单筛选记录,以exam_id分组,计算总的作答次数;
- 第三步:联立tag,选择tag展现,总作答次数降序排
下面是代码:
#当月完成试卷数>=3的用户名单
with
a as
(
select uid
from exam_record
where submit_time is not NULL
group by uid
having (count(exam_id)
/ count(DISTINCT date_format(submit_time,"%Y%m"))) >=3
),
#目标用户中作答试卷按分类计算作答次数(没有提交的记录也算作答次数)
b as
(
select x.exam_id,count(ifnull(submit_time,1)) num
from exam_record x
inner join a on x.uid = a.uid
group by x.exam_id
)
#联立info表,关联tag字段,按作答次数降序排列
select c.tag,b.num
from b left join examination_info c
on b.exam_id = c.exam_id
order by b.num DESC
(这道题实在无力吐槽,理解题意比做这题难多了……,只须关注当月9月不用管其他月份的我也是麻了,月均完成试卷数居然是这样理解了啊啊啊啊啊啊)