sql查询选修课程2门以上且成绩都在80分以上的学生
时间: 2024-03-18 20:42:11 浏览: 145
你好,针对你的问题,可以使用以下 SQL 语句来实现:
```
SELECT student_name
FROM student_course
WHERE course_name IN (
SELECT course_name
FROM student_course
WHERE score >= 80
GROUP BY course_name
HAVING COUNT(*) >= 2
)
GROUP BY student_name
HAVING COUNT(*) = (
SELECT COUNT(DISTINCT course_name)
FROM student_course
WHERE score >= 80
)
```
解释一下这个 SQL 语句:
首先,我们需要从 student_course 表中找到所有成绩大于等于 80 分的课程,并且这些课程的选修人数不少于 2 人。为了实现这个目标,我们使用了一个子查询,它首先按照课程名称进行分组,然后统计每个课程的选修人数;最后,通过 HAVING 子句筛选出选修人数不少于 2 人的课程。
接下来,我们需要从 student_course 表中筛选出所有选修了这些课程的学生,并且这些学生选修的课程数目等于上一步中筛选出的课程数目。为了实现这个目标,我们使用了另一个子查询,它首先按照学生姓名进行分组,然后统计每个学生选修的课程数目;最后,通过 HAVING 子句筛选出选修课程数目等于上一步中筛选出的课程数目的学生。
最终,我们得到的结果就是所有选修了至少 2 门成绩都在 80 分以上的课程的学生姓名。
阅读全文