with t1 as ( select a.uid, a.exam_id, a.score, b.tag from exam_record as a left join examination_info as b on a.exam_id = b.exam_id ), t2 as ( select d.uid, d.exam_id, d.score, c.level from user_info as c right join ( select uid, exam_id, score from t1 where tag = 'SQL' and score IS NOT NULL ) as d on c.uid = d.uid ), t3 as ( select uid, exam_id, score from t2 where level > 5 ) select exam_id, count(distinct uid) as uv, round(AVG(score), 1) as avg_score from t3 group by exam_id order by uv desc, avg_score;