sql - 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
解决方案
使用聚合。我认为这就是你想要的:
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;
推荐阅读
- javascript - 使用 js 请求检查网页是公共的还是私有的
- curl - 谷歌脚本中的 curl 语法以获取访问令牌
- c# - Eyeshot Devdept 实体到表面
- java - Gradle 未签署 nexus 回购协议
- arrays - 将 MongoDB 中的多个文档规范化为单个文档
- scala - 在执行器上动态创建累加器
- asynchronous - 为什么要嵌套异步计算?
- javascript - Redux 自定义 observeStore-function 的输入
- apache-spark - 在 Pyspark 数据框中创建 JSON
- python - 无法从跨两个包共享的命名空间导入符号