C 课程信息表(课号Cno, 课程名称Cname, 授课教师Teacher)、 SC 选课表(学号Sno, 课号Cno, 成绩Grade)查询每门课程的课号、课名、选课人数及平均成绩;要求查询结果按平均成绩的降序排列
时间: 2024-11-16 10:20:49 浏览: 10
在SQL查询中,你可以通过联接两个表(Course 和 SC),并使用 COUNT 函数计算选课人数,以及 AVG 函数计算平均成绩来实现这个需求。下面是一个示例 SQL 查询:
```sql
SELECT
Course.Cno AS 课号,
Course.Cname AS 课程名称,
COUNT(*) OVER (PARTITION BY Course.Cno) AS 选课人数,
AVG(Sc.Grade) OVER (PARTITION BY Course.Cno) AS 平均成绩
FROM
Course
LEFT JOIN
SC ON Course.Cno = SC.Cno
ORDER BY
AVG(Sc.Grade) DESC;
```
解释一下这个查询:
- `JOIN` 操作将 Course 表和 SC 表通过课号 (`Cno`) 进行关联。
- `COUNT(*) OVER (PARTITION BY Course.Cno)` 计算每个课程的选课人数,对每个课号(Cno)进行分区。
- `AVG(Sc.Grade) OVER (PARTITION BY Course.Cno)` 计算每个课程的平均成绩。
- `GROUP BY` 被省略,因为我们在 SELECT 中直接使用了聚合函数,不需要单独列出。
- `ORDER BY AVG(Sc.Grade) DESC` 将结果按照平均成绩降序排序。
相关问题
"学生表 Student(Sno 学号、Sname 姓名、Ssex 性别、Sage 年龄、Sdept所在系); 课程表 Course(Cno 课程号、Cname 课程名 Cpno 选修课号、Ccredit 学分); 成绩表 SG(Sno学号、Cno 课程号、 Grade 成绩); 问题:查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列"
可以使用如下 SQL 语句进行查询:
```
SELECT SG.Sno, SG.Grade
FROM SG
WHERE SG.Cno = '3'
ORDER BY SG.Grade DESC;
```
这个查询语句会在成绩表 SG 中查找选了课程号为 3 的学生的学号和成绩,并按照成绩的降序排列输出结果。
假设你有两个表:一个学生表(student_209)和一个课程表(course_209)和一个选课表(sc_209)。 学生表包含学生的信息,包括学生的学号sno和姓名sname。 课程表包含课程的信息,包括课程编号cno,课程名称cname和学分credit,选课表,其中包含学生的选课信息,包括学生的学号sno,课程编号cno和分数grade。查询选修了1门且平均分在80分以下课程的学生的学号。
可以使用以下 SQL 查询语句来实现:
```
SELECT sc_209.sno
FROM sc_209
JOIN course_209 ON sc_209.cno = course_209.cno
GROUP BY sc_209.sno
HAVING COUNT(*) = 1 AND AVG(sc_209.grade) < 80;
```
这个查询语句使用了三个表的连接,首先将选课表(sc_209)和课程表(course_209)通过课程编号(cno)进行连接,然后根据学生学号(sno)进行分组,筛选出只选修了一门课程的学生,并计算他们的平均分数,最后筛选出平均分在80分以下的学生学号。
阅读全文