sql查询“ 查询各门课程的选修及格人数、及格比率。各列标题显示为课程号、及格人数、选修人数、及格比率。”
时间: 2023-08-31 15:38:17 浏览: 110
查询每门课程被选修的学生数-结构化语言SQL
### 回答1:
这个查询可以写成:
```
SELECT
course_id AS 课程号,
COUNT(CASE WHEN score >= 60 THEN 1 END) AS 及格人数,
COUNT(*) AS 选修人数,
COUNT(CASE WHEN score >= 60 THEN 1 END) / COUNT(*) AS 及格比率
FROM
course_student
WHERE
score IS NOT NULL
GROUP BY
course_id;
```
其中,`course_student` 表存储了选课和成绩信息,包含以下列:
- `course_id`: 课程编号
- `student_id`: 学生编号
- `score`: 分数
这个查询使用了 `COUNT` 和 `CASE` 函数,将符合条件 (`score >= 60`) 的学生计数,并且统计了总共选修该门课程的人数。最后,通过除法计算了及格比率。
### 回答2:
假设有两个相关的表:课程表(course)和成绩表(score)。课程表包含课程号(course_id)和选修人数(enrollment),成绩表包含学生学号(student_id)、课程号(course_id)和成绩(score)。
根据题目要求,我们需要查询各门课程的选修及格人数、选修人数和及格比率。以下是一种通过SQL查询实现的方法:
```sql
SELECT
course.course_id AS 课程号,
COUNT(CASE WHEN score >= 60 THEN student_id END) AS 及格人数,
course.enrollment AS 选修人数,
COUNT(CASE WHEN score >= 60 THEN student_id END) / course.enrollment AS 及格比率
FROM
course
LEFT JOIN
score
ON
course.course_id = score.course_id
GROUP BY
course.course_id, course.enrollment;
```
该查询使用了左连接(LEFT JOIN)将课程表和成绩表关联起来,以确保查询结果中包含所有的课程,即使有些课程没有学生成绩。在查询的SELECT子句中,使用了COUNT和CASE WHEN函数来统计及格人数,以及计算及格比率。
查询结果将会按照课程号进行分组,并显示出每门课程的及格人数、选修人数和及格比率。
### 回答3:
要查询各门课程的选修及格人数、选修人数及格比率,需要通过下列SQL语句实现:
SELECT 课程号,
COUNT(CASE WHEN 分数 >= 60 THEN 1 END) AS 及格人数,
COUNT(*) AS 选修人数,
COUNT(CASE WHEN 分数 >= 60 THEN 1 END) / COUNT(*) AS 及格比率
FROM 学生成绩
GROUP BY 课程号;
以上SQL语句中,首先使用COUNT函数结合CASE语句来计算每门课程中及格的人数。CASE语句中,当分数大于等于60时返回1,否则返回NULL,再通过COUNT函数来统计非NULL值的个数,即及格人数。
接着使用COUNT函数统计每门课程的选修人数,不论是否及格。
最后利用被除数COUNT(CASE WHEN 分数 >= 60 THEN 1 END)和除数COUNT(*)来计算及格比率,并使用AS关键字为每列起一个别名方便阅读。最后使用GROUP BY子句按照课程号进行分组,并显示出查询结果。
阅读全文