with temp1 as ( select avg(score) over ( partition by exam_id ) as avg_score, avg(timestampdiff(minute, start_time, submit_time)) over ( partition by exam_id ) as avg_time, timestampdiff(minute, start_time, submit_time) as time, emp_id, score, tag, e.exam_id from exam_record e join examination_info ei on ei.exam_id = e.exam_id ) select t.emp_id, emp_level, tag as exam_tag from temp1 t join emp_info emp on emp.emp_id = t.emp_id where time < avg_time and score > avg_score and emp_level < 7 order by t.emp_id, exam_id;