首页 > 解决方案 > SQL - 评估多行的最小值,然后过滤以显示唯一行列表?

问题描述

我的最终目标是创建一个荣誉榜学生名单。每个学生有多个行,每个年级一个。我想说,看看他们在这些行中的成绩;如果没有一个学生的成绩低于 80%,则只显示 1 个学生的姓名。

我刚开始这样做,但我被困住了,我不知道如何评估多行作为选择唯一列表的标准。

SELECT students.first_name, students.last_name, storedgrades.storecode, storedgrades.percent,storedgrades.course_name
FROM storedgrades join
     students
     on students.ID = storedgrades.StudentID
where students.enroll_status=0  AND
      storedgrades.termid>2799  AND
      storedgrades.storecode = 'Q4'

成绩表示例:

BOB  A  95
BOB D  65
ANDREA  B  85
ANDREA  A  95

示例结果:

ANDREA

标签: sqloracleoracle-sqldeveloper

解决方案


使用聚合。我认为这就是你想要的:

select s.id, s.first_name, s.last_name
from students s join
     storedgrades sg 
     on s.ID = sg.StudentID
where s.enroll_status = 0  and
      sg.termid > 2799  AND
      sg.storecode = 'Q4'
group by s.id, s.first_name, s.last_name
having count(*) = 5 and  -- you want all five courses
       min(scorecode) >= 80;

推荐阅读