查询选修各门课程的人数及平均成绩,并按平均成绩降序排序结果标题显示为课程号人数平均成绩。数据库
时间: 2024-10-20 21:15:45 浏览: 112
查询选修各门课程的人数及平均成绩,并按平均成绩降序排序,通常涉及到SQL查询。假设我们有一个名为`Students`的表记录学生信息,包括`StudentID`(学生ID)、`CourseID`(课程ID)和`Score`(成绩),以及一个`Courses`表用于存储课程的基本信息。我们可以使用如下SQL语句:
```sql
SELECT
c.CourseID AS '课程号',
COUNT(s.StudentID) AS '人数',
AVG(s.Score) AS '平均成绩'
FROM
Students s
JOIN
Courses c ON s.CourseID = c.CourseID
GROUP BY
c.CourseID
ORDER BY
AVG(s.Score) DESC;
```
这个查询做了以下几件事:
1. `JOIN`操作将`Students`表和`Courses`表通过`CourseID`关联起来。
2. `COUNT(s.StudentID)`计算每门课的学生人数。
3. `AVG(s.Score)`计算每门课的平均成绩。
4. `GROUP BY c.CourseID`确保每个课程的结果是一组。
5. `ORDER BY AVG(s.Score) DESC`按平均成绩从高到低排序结果。
相关问题
在数据库的单表查询中查询选修各门课程的人数和平均成绩,并且按平均成绩降序排序。结果标题显示为课程号,人数,平均成绩。写一段代码完成以上任务
假设我们有一个名为`courses`的数据库表,包含字段`course_id`(课程号), `student_id`(学生ID), 和`score`(成绩)。以下是一个使用SQL查询的例子,这个查询将返回每个课程的选修人数以及平均成绩,按照平均成绩从高到低排序:
```sql
SELECT
c.course_id AS "课程号",
COUNT(DISTINCT s.student_id) AS "人数",
AVG(s.score) AS "平均成绩"
FROM
courses c
JOIN
(SELECT student_id FROM courses GROUP BY student_id HAVING COUNT(*) > 1) subquery ON c.student_id = subquery.student_id
GROUP BY
c.course_id
ORDER BY
AVG(s.score) DESC;
```
这段代码首先通过子查询找出每个有选修多门课程的学生(GROUP BY 学生ID并HAVING选修课程数大于1),然后在主查询中计算每个课程的选修人数(COUNT(DISTINCT student_id))和平均成绩(AVG(score))。最后,使用ORDER BY对结果按平均成绩降序排列。
阅读全文