PostgreSQL:打印学生姓名,该课程的研究生人数超过本科生

PostgreSQL:打印学生姓名,该课程的研究生人数超过本科生,sql,postgresql,Sql,Postgresql,我正试图写一个PostgreSQL,却犯了一个可怕的错误 我需要打印学生的姓名,并且该课程的研究生人数超过本科生 从个人p中选择p.name加入课程c on(p.Course=c.id)按p.code加入学生s on(c.st_info=s.id)分组,p.name有count(s.type='undergrad')>count(s.type='postgrad')您可以使用如下逻辑识别课程: select c.id from Course c join Student s

我正试图写一个PostgreSQL,却犯了一个可怕的错误

我需要打印学生的姓名,并且该课程的研究生人数超过本科生


从个人p中选择p.name加入课程c on(p.Course=c.id)按p.code加入学生s on(c.st_info=s.id)分组,p.name有count(s.type='undergrad')>count(s.type='postgrad')

您可以使用如下逻辑识别课程:

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 );
我会让你弄清楚如何让学生们真正参加课程

注:

  • 您在
中的逻辑与相反。这是一个相当基本的错误
  • count()
    统计非空值的数量。布尔表达式可能总是非空的,因此它们将返回相同的值
    sum()
    就是您想要的
  • 您的数据模型没有真正意义。为什么
    课程
    有学生id?为什么
    person
    有课程id

  • 这听起来像是两个问题,一个是列出学生,一个是计数。不,我只需要打印出修过这门课的人的名字,而这门课的研究生比本科生多。你能提供一些样本数据并期望得到结果吗?我明白了。我认为您需要向我们展示这3张表的表结构。我很难理解人与学生之间的关系非常感谢大家。戈登能够弄明白。请参考答案以供参考。不过我做了一点改变。我喜欢另一张桌子。就这些,谢谢!这真的很有帮助。这是一个用于实践目的的虚拟数据。我现在正在学习如何获取数据。