WITH jun AS( SELECT a.*, b.tag FROM exam_record a INNER JOIN examination_info b ON a.exam_id = b.exam_id WHERE tag = 'SQL' AND score IS NOT NULL ) SELECT MIN(score) FROM jun WHERE score >= (SELECT AVG(score) FROM jun)
上一题用的临时表,现在也想用临时表
题解:
任务:找最低分
限制:高于平均分,SQL类型的卷子
思路:首先要找到SQL类型的卷子的平均分,这里用的临时表
之前想直接一步到位求出sql卷子的平均分,如下:
WITH jun AS( SELECT AVG(score) avg_score FROM exam_record a INNER JOIN examination_info b ON a.exam_id = b.exam_id WHERE tag = 'SQL' ) SELECT MIN(score) FROM exam_record,jun WHERE score >= avg_score
但是这样只能通过一个用例,错误原因在于我的临时表求的是sql的平均分,但是主查询是从所有的记录里找到高于sql的平均分的最小值,范围变大,使得若sql的高于平均分的最小值如果大于算法的,那就会出错。
对于这个的修改,可以继续联结表,但这样就更繁琐了,还不如第一个那样简洁
WITH jun AS( SELECT AVG(score) avg_score FROM exam_record a INNER JOIN examination_info b ON a.exam_id = b.exam_id WHERE tag = 'SQL' ) SELECT MIN(score) FROM exam_record a, jun, examination_info b WHERE a.exam_id = b.exam_id AND b.tag = 'SQL' AND score >= avg_score