这道题的考点较为丰富,包括表连接、条件筛选、均值计算、保留小数等,其中在剔除最大最小值时卡了一下,有想过使用limit,但没奏效,最会还是选择较为直接暴力的min、max函数。
  • 表连接:由于分数数据存放在exam_record表中,因而需要以exam_record表为主表进行外连接,此处选择使用right join。
  • 条件筛选:要求中有好几个细节,首先是是针对SQL类中难度为hard的数据,同时观察可知,最终数据是不包含空值的,因此在筛选时同样要予以剔除。
  • 均值计算:avg()函数
  • 保留小数:round(x,d),其中x为需要进行处理的数据,d为需要保留的小数点位。
select tag,difficulty,round(avg(score),1) clip_avg_score from examination_info t1 
right join exam_record t2 on t1.exam_id = t2.exam_id
where tag = 'SQL' and difficulty = 'hard' and score is not null
and score > (select min(score) from exam_record where exam_id = 9001 and score is not null)  //  筛选出min值后需要对整个部分加括号
and score < (select max(score) from exam_record where exam_id = 9001 and score is not null)