我是SQL新手,并尝试针对以下结果表编写查询,该查询将使我能够列出学生Mary得分高于Tom的学科。

    Subject        Student        Teacher        Score
    --------------------------------------------------
    Maths           Tom            Anderson        67
    Maths           Mary           Anderson        68
    English         Tom            Lewis           55
    English         Mary           Lewis           44
    French          Tom            Joubert         87
    French          Mary           Joubert         76
    Geography       Tom            Arnold          76
    Geography       Mary           Arnold          82


结果应为下表:

    Subject
    ---------
    Maths
    Geography


我相信我应该使用join子句,但无法使其正常工作。

谢谢

最佳答案

假设没有重复的分数,您实际上可以使用聚合来完成。

select subject
from results
group by subject
having max(case when student = 'Mary' then score end) >
       max(case when student = 'Tom' then score else 0 end);


请注意,这将包括玛丽得分较高但汤姆没有得分的主题。

10-04 15:01