SQL14 SQL类别高难度试卷得分的截断平均值

题目主要信息:

  • 计算所有用户做的试卷中tag为SQL,难度为hard的得分的截断平均值
  • 截断平均值是去掉一个最大值和一个最小值后的平均值,记为clip_avg_score
  • 其中试卷信息记录在表examination_info(包括试卷ID、类别、难度、时长、发布时间),答题信息记录在表exam_record(包括试卷ID、用户ID、开始时间、结束时间、得分)
  • 结果保留小数点后一位

问题拆分:

  • 输出的包括标签、难度、截断平均值,需要选择。知识点:select
  • 我们要的信息分布在两个表中,依靠exam_id连接两个表。 知识点:join
  • 筛选tag='SQL',difficulty='hard',score is not null的试卷。知识点:where
  • 计算截断平均数(下述score是经过上述筛选后的分数):
    • 找到得分最大值max(e_r.score)
    • 找到得分最小值min(e_r.score)
    • 找到得分和sum(e_r.score),得分和减去最大值和最小值;
    • 找到有得分的试卷数量count(e_r.score),试卷份数减去2;
    • 保留一位小数round(x,1)

代码:

select e_i.tag, e_i.difficulty, round((sum(e_r.score) - max(e_r.score) - min(e_r.score)) / (count(e_r.score) - 2), 1) as clip_avg_score
from examination_info e_i join exam_record e_r
where e_i.exam_id = e_r.exam_id
and e_i.tag = 'SQL'
and e_i.difficulty = 'hard'
and e_r.score is not null;