题目拆解
1.activity1:2021年里,所有每次试卷得分都能到85分的人

思路:分组后 用having筛选出min(score)>=85的

(针对活动1,我刚开始是用的where筛选,细想其实是不满足 '所有每次试卷得分都能到85分'中的所有每次的,用having 筛选出分组后min(score)>=85的才对)

2.activity2:至少有一次用了一半时间就完成高难度试卷且分数大于80的人

至少有一次,一半时间,高难度,分数大于80

时间差:timestampdiff(second ,start_time ,submit_time )

补充:

datediff()计算date差值
timediff()计算时分秒差值

timestampdiff()计算指定维度的时间差

注意:在这里要精确到秒,避免出现30分05秒这种情况

select uid , 'activity1' as activity  from exam_record 
where  year(submit_time) ='2021'
group by uid
having min(score) >=85

union all

select uid,'activity2 'as activity from exam_record  a
left join examination_info b
on a.exam_id =b.exam_id 
where score >80 and year(submit_time) ='2021' and b.difficulty='hard'
and timestampdiff(second ,start_time ,submit_time ) <= duration*30
order by uid asc

犯过的错误:'activity1'没有加’‘引号,忽略高难度这个条件