1

我有一张表,其中包含与属于课程的学生相关的信息,这些学生参加了特定级别的考试(knowdledge_level)。对于每个知识级别,有多个考试(在知识级别 1 的情况下,考试是 ID 1 和 2 的考试,而在知识级别 2 的情况下,考试是 ID 3 和 4 的考试)。

Course     Student   Exam_ID       Knowdledge_level    Passed
A          25        1             1                   yes
A          25        2             1                   yes
A          25        3             2                   no
A          25        4             2                   yes
A          26        1             1                   no
A          26        2             1                   no
A          26        3             2                   no
A          26        4             2                   no

我想为每个学生(25 岁和 26 岁)获得的是所有考试都通过的最高知识水平。学生 25 的成绩应该是 1,因为他通过了 1 级的所有考试,但没有通过 2 级的一次考试,所以他不能完全达到知识 2 级,而学生 26 的水平应该是NULL(或零),因为他没有通过任何考试。

我想知道哪个查询应该返回所需的结果,在这种情况下:

Course     Student   Knowdledge_level    
A          25        1  
A          26        NULL (or zero)

你可以帮帮我吗?:)

谢谢!

4

1 回答 1

1

使用布尔聚合函数bool_and()

select course, student, max(knowledge_level) as knowledge_level
from (
    select 
        course, 
        student, 
        case when bool_and(passed) then knowledge_level else 0 end as knowledge_level
    from exams
    group by course, student, knowledge_level
    ) s
group by course, student
order by course, student

 course | student | knowledge_level 
--------+---------+-----------------
 A      |      25 |               1
 A      |      26 |               0
(2 rows)

此现场演示中,您可以了解如何通过简单的步骤构建查询。

于 2019-09-13T23:07:36.757 回答