明确需求

计算当月完成试卷数不小于3的用户,统计其爱作答的类别

当月均完成试卷数:count(当月提交记录不为null)/当月(1)

统计爱作答的类别:试卷名称 作答次数

(题目虽然写的是“月均完成试卷数不少于3的用户爱作答的类别”,但题目详述里面有这个*“当月均”**,即计算的是当月(本题默认9月,其他月份不考虑)* alt

思路拆解:

  1. 第一步:剔除未完成的记录,以uid分组,计算每个用户完成试卷数并进行筛选,得出用户名单
  2. 第二步:根据第一步的名单筛选记录,以exam_id分组,计算总的作答次数;
  3. 第三步:联立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月不用管其他月份的我也是麻了,月均完成试卷数居然是这样理解了啊啊啊啊啊啊)