首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL -查询列出所有至少有一个分数与0不同的学生

PostgreSQL -查询列出所有至少有一个分数与0不同的学生
EN

Stack Overflow用户
提问于 2022-05-04 09:24:13
回答 2查看 31关注 0票数 0

我正在研究PostgreSQL,我试图检索在某一特定事项中至少有一个分数与0不同的学生的列表,或者简单地过滤在特定事项中具有0的所有学生,这是我的DB结构:

代码语言:javascript
复制
Student {
id,
name,
other info..
}

Mark {
id,
student_id,
matter,
mark
}

例如

代码语言:javascript
复制
Student(1,"John"..)
Mark(1,1,'Mathematics',0);
Mark(2,1,'Mathematics',0);
Mark(3,1,'Mathematics',0);

Mark(4,1,'Physics',15);
Mark(5,1,'Physics',12);
Mark(6,1,'Physics',11);


Student(2,"Albert"..)

Mark(7,2,'Mathematics',0);
Mark(8,2,'Mathematics',17);
Mark(9,2,'Mathematics',0);

Mark(10,2,'Physics',0);
Mark(11,2,'Physics',0);
Mark(12,2,'Physics',0);

Student(3,"Chris"..)

Mark(13,3,'Mathematics',0);
Mark(14,3,'Mathematics',0);
Mark(15,3,'Mathematics',0);

Mark(16,3,'Physics',0);
Mark(17,3,'Physics',0);
Mark(18,3,'Physics',0);

在这种情况下,我们过滤了约翰的数学分数和阿尔伯特的物理分数,我们根本没有显示克里斯

EN

回答 2

Stack Overflow用户

发布于 2022-05-04 09:36:59

你可以这样做(结果在这里)

代码语言:javascript
复制
select * 
from student s,mark m
where s.id = m.student_id
and m.mark > 0
票数 0
EN

Stack Overflow用户

发布于 2022-05-04 09:49:57

要找到所有至少有一个非零分数的学生,我会使用一个存在条件:

代码语言:javascript
复制
select stu.*
from student stu
where exists (select * 
              from mark mrk
              where mrk.student_id = stu.id
                and mrk.mark <> 0);

要找到只有零分的学生要复杂得多,而且需要聚合。

代码语言:javascript
复制
select stu.*
from student stu
where exists (select mrk.student_id
              from mark mrk
              where mrk.student_id = stu.id
              group by mrk.student_id
              having bool_and(mrk.mark = 0));

逻辑上,子查询中不需要group by,因为它只处理单个学生,但是SQL语法规则需要它。

这也可以表示为针对派生表的联接,实际上该表可能会更高效一些:

代码语言:javascript
复制
select stu.*
from student stu
  join (
    select mrk.student_id, bool_and(mrk.mark = 0) as all_marks_are_zero
    from mark mrk
    group by mrk.student_id
  ) m on m.student_id = stu.id and m.all_marks_are_zero

在线示例

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72110649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档