with temp as ( select exam_id, round( avg( timestampdiff(second, start_time, submit_time) / 60 ), 1 ) as avg_time, avg(score) as avg_score from exam_record group by exam_id )
首先,先计算出两个考试的平均考试用时和平均分数,计算用了多少秒 再除以60可以得到带小数的分钟表示(其实不除也行,反正最后不用表示出来),建立一个临时表。
select er.emp_id, emp_level, tag as exam_tag from exam_record er left join emp_info ei on er.emp_id = ei.emp_id left join examination_info ex on er.exam_id = ex.exam_id left join temp on er.exam_id = temp.exam_id where timestampdiff(second, start_time, submit_time) / 60 < avg_time and score > avg_score and emp_level < 7;
然后再把三个表和临时表结合到一起,最后按照条件选出比平均分大,比平均用时少,等级<7的就可以了