下表:学生姓名,学生的主管姓名(一位导师可以有一些学生),课程后的学生标记。
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应该作为查询结果返回。
答案 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个标记。