我试图写一个PostgreSQL并且犯了可怕的错误。
我需要打印作为学生的人的姓名,而且研究生的学生人数不仅仅是本科课程的本科生
select p.name from Person p join Course c on (p.course=c.id) join Student s on (c.st_info=s.id) group by p.code,p.name having count(s.type='undergrad') > count(s.type='postgrad');
答案 0 :(得分:1)
您可以使用以下逻辑来识别课程:
select c.id
from Course c join
Student s
on c.st_info = s.id
group by c.id
having sum( (s.type = 'postgrad')::int ) > sum( (s.type = 'undergrad')::int );
我会让你弄清楚如何让那些真正参加课程的学生。
注意:
having
中的逻辑被颠倒了。这是一个非常基本的错误。count()
计算非NULL值的数量。布尔表达式可能总是非NULL,因此它们将返回相同的值。 sum()
就是你想要的。course
有学生ID?为什么person
有课程ID?