查询各门课程及格以上的学生人数,列出课程号和及格以上学生人数, --对于没有学生选修或选课学生都不及格的课程,学生人数设置为 0。
时间: 2024-11-18 18:18:34 浏览: 15
为了获取各门课程及格以上的学生人数,我们需要首先计算每门课程的合格人数,然后在结果中设置不及格课程的学生人数为0。这通常涉及到两个步骤:首先统计每门课程的总人数,然后筛选出及格的学生数。假设我们有students和grades表,可以这样做:
```sql
WITH course_grades AS (
SELECT c.course_id, COUNT(s.student_id) AS total_students, SUM(CASE WHEN g.grade >= '及格' THEN 1 ELSE 0 END) AS passing_students
FROM courses c
LEFT JOIN students s ON c.course_id = s.course_id
LEFT JOIN grades g ON s.student_id = g.student_id
GROUP BY c.course_id
),
course_counts AS (
SELECT cg.course_id, cg.total_students, COALESCE(cg.passing_students, 0) AS passing_students
FROM course_grades cg
)
SELECT * FROM course_counts WHERE passing_students > 0;
```
这个查询首先创建了一个名为`course_grades`的临时视图,用于计算每个课程的总学生数和及格学生数。然后,在`course_counts`视图中,使用`COALESCE`函数将不及格课程的`passing_students`设为0。
阅读全文