我正试图写一个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');
发布于 2018-04-14 11:53:02
您可以使用这样的逻辑来标识课程:
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()计数非空值的数量。布尔表达式可能总是非空的,因此它们将返回相同的值。sum()是你想要的。course有学生身份证?为什么person有一个课程标识?https://stackoverflow.com/questions/49830922
复制相似问题