题解 | #得分不小于平均分的最低分#
得分不小于平均分的最低分
https://www.nowcoder.com/practice/3de23f1204694e74b7deef08922805b2
/* 将两个表连接起来,SELECT成绩,并且增加一列按照tag分组计算成绩均值,形成新的表T。将T的成绩升序排序,LIMIT 1。 */ WITH T AS( SELECT er.score, AVG(er.score) OVER(PARTITION BY ei.tag) AS avg FROM exam_record er INNER JOIN examination_info ei USING (exam_id) WHERE ei.tag = 'SQL' ) SELECT score AS min_score_over_avg FROM T WHERE score >= avg ORDER BY score LIMIT 1
将exam_record和examination_info连接起来形成新的表T,并且在T中增加一列按照tag分组的平均成绩,用窗口函数。因为最终只需要显示score,所以表T只需要score字段和平均分字段。
在T中筛选score大于等于平均分的行即可,升序排序,LIMIT 1即可找到大于平均分的最小成绩。