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