SQL:return lector,其所有学生都通过了优秀分数

时间:2017-11-26 23:32:18

标签: mysql sql

下表:学生姓名,学生的主管姓名(一位导师可以有一些学生),课程后的学生标记。

Stud    Lector  Mark
-----------------
Joe     Mr.A    5
Steve   Mr.A    4
Bob     Mr.B    5
Jim     Mr.D    5
Kai     Mr.C    4
Mo      Mr.A    3
Hue     Mr.B    3
Mia     Mr.D    5

什么样的查询将返回lector(s),其所有学生都通过了很好的课程(得到5分)。就我们而言 - Mr.D应该作为查询结果返回。

2 个答案:

答案 0 :(得分:2)

你必须加入桌子;曾经获得优秀的成绩,并再次获得可能不太优秀的成绩。有几种方法可以达到这个目的,但最好的恕我直言是这样的:

select distinct a.lector
from mytable a
left join mytable b on a.lector = b.lector
    and b.mark != 5
where a.mark = 5
and b.mark is null

这里的技巧是使用从优秀标记到更差标记的外部联接,并使用b.mark is null确保实际上没有更差的标记。

答案 1 :(得分:2)

我认为最简单的方法是通过lector上的聚合:

SELECT Lector
FROM yourTable
GROUP BY Lector
HAVING SUM(CASE WHEN Mark < 5 THEN 1 ELSE 0 END) = 0;

这种方法的好处在于它根据你想要实现的实际逻辑仔细阅读。也就是说,我们只需检查每个lector的标记,并确保没有出现5个标记。

Demo