题解 | #SQL类别高难度试卷得分的截断平均值#

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

https://www.nowcoder.com/practice/a690f76a718242fd80757115d305be45

# 两表join,并构建每个考试的最大分列和最小分列
WITH tmp1 AS (
    SELECT t1.id,
           uid,
           t1.exam_id,
           score,
           tag,
           difficulty,
		   # 构建最大分值列
           MAX(score)
               OVER (PARTITION BY t1.exam_id ORDER BY score ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS max,
		   # 构建最小分值列
           MIN(score)
               OVER (PARTITION BY t1.exam_id ORDER BY score ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS min
    FROM exam_record t1
			# join的时候筛选出‘hard’的考试,并按照exam_id相等进行关联
             LEFT JOIN (SELECT * FROM examination_info WHERE difficulty = 'hard') t2 ON t1.exam_id = t2.exam_id
			过滤掉关联不上的数据,以及没成绩的数据
    WHERE t2.id IS NOT NULL
      AND t1.score IS NOT NULL)
	  #过滤掉成绩和最大、最小相等的数据,按照考试id,tag,难度的分组聚合,求出平均分
SELECT tag,
        difficulty,
		#求平均分
        round( avg(score),1) as clip_avg_score
FROM tmp1
#过滤
WHERE score != max
  AND score != min
  #分组
GROUP BY exam_id,tag,difficulty;

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务