我在下面的例子中有一个用例, 我正在为我如何做一个选择语句来获取所有记录来显示一个或多个科目失败的学生的逻辑而苦苦挣扎
假设我有下表
Student_id | 姓名 | 主题 | 分数 |
---|---|---|---|
s1 | 亚当 | 英语 | 35 |
s1 | 亚当 | 数学 | 69 |
s1 | 亚当 | 科学 | 55 |
s2 | 鲍勃 | 英语 | 56 |
s2 | 鲍勃 | 数学 | 76 |
s2 | 鲍勃 | 科学 | 88 |
s3 | 流行 | 英语 | 33 |
s3 | 流行 | 数学 | 90 |
s3 | 流行 | 科学 | 76 |
预期输出应该是
Student_id | 姓名 | 主题 | 分数 |
---|---|---|---|
s1 | 亚当 | 英语 | 35 |
s1 | 亚当 | 数学 | 69 |
s1 | 亚当 | 科学 | 55 |
s3 | 流行 | 英语 | 33 |
s3 | 流行 | 数学 | 90 |
s3 | 流行 | 科学 | 76 |
我试过下面的查询,但它没有显示任何值
select count(*)
from (select student_id
from student
where marks < 50
group by student_id
having count(subject) > 1) as dt
SELECT Student_id, name, subject, marks
FROM student_marks
WHERE Student_id IN (
SELECT Student_id
FROM student_marks
WHERE marks < 40
GROUP BY Student_id
HAVING COUNT(*) >= 1
)
这个查询会先从student_marks表中选出所有分数小于40的记录,然后按Student_id对记录进行分组,统计每组记录的条数