题解 | #分别满足两个活动的人#
分别满足两个活动的人
http://www.nowcoder.com/practice/a126cea91d7045e399b8ecdcadfb326f
题目拆解
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'没有加’‘引号,忽略高难度这个条件