列出所有通过或未通过的学生
List all students with pass or fail
我有table这样的结构
学生
Id
Student name
1
AAAA
2
BBBB
主题
Id
Subject name
1
Subject1
2
Subject2
标记
student_id
subject_id
marks
1
1
35
1
2
34
2
1
54
2
2
42
要求是,列出所有通过(所有科目得分 >=35 分)或失败(任何科目得分 <35 分)状态的学生。有什么建议吗?
不确定要添加什么 if 条件
select student.id, student.name, 'status (if marks.marks >= 35, Pass, Fail)'
from student
inner join marks on marks.student_id = student.id
预期输出
student_id
student_name
status
1
AAAA
Fail
2
BBBB
Pass
加入 Student
到 Marks
并按学生分组。
然后使用 CASE
表达式检查每个学生的最低分数以获取状态:
SELECT s.id student_id, s.student_name,
CASE WHEN MIN(m.marks) >= 35 THEN 'Pass' ELSE 'Fail' END status
FROM Student s INNER JOIN Marks m
ON m.student_id = s.id
GROUP BY s.id;
我假设 id
是 table Student
的主键。
如果不是,请将 GROUP BY
子句更改为:
GROUP BY s.id, s.student_name
见demo
我有table这样的结构
学生
Id | Student name |
---|---|
1 | AAAA |
2 | BBBB |
主题
Id | Subject name |
---|---|
1 | Subject1 |
2 | Subject2 |
标记
student_id | subject_id | marks |
---|---|---|
1 | 1 | 35 |
1 | 2 | 34 |
2 | 1 | 54 |
2 | 2 | 42 |
要求是,列出所有通过(所有科目得分 >=35 分)或失败(任何科目得分 <35 分)状态的学生。有什么建议吗?
不确定要添加什么 if 条件
select student.id, student.name, 'status (if marks.marks >= 35, Pass, Fail)'
from student
inner join marks on marks.student_id = student.id
预期输出
student_id | student_name | status |
---|---|---|
1 | AAAA | Fail |
2 | BBBB | Pass |
加入 Student
到 Marks
并按学生分组。
然后使用 CASE
表达式检查每个学生的最低分数以获取状态:
SELECT s.id student_id, s.student_name,
CASE WHEN MIN(m.marks) >= 35 THEN 'Pass' ELSE 'Fail' END status
FROM Student s INNER JOIN Marks m
ON m.student_id = s.id
GROUP BY s.id;
我假设 id
是 table Student
的主键。
如果不是,请将 GROUP BY
子句更改为:
GROUP BY s.id, s.student_name
见demo