本题目要求编写SQL语句, 统计各专业的学生选课的平均成绩,如果某专业尚未有任何学生选修课程或成绩为空时,平均分计为0。输出结果集按照major表中的mno升序排序。
时间: 2024-02-13 18:05:30 浏览: 26
好的,根据您的要求,以下是SQL语句:
```
SELECT mno, COALESCE(AVG(score), 0) AS avg_score
FROM major LEFT JOIN student ON major.mno = student.mno
LEFT JOIN sc ON student.sno = sc.sno
GROUP BY major.mno
ORDER BY major.mno ASC;
```
解释一下上面的SQL语句:
1. 使用 LEFT JOIN 连接三张表:major, student, sc
2. 使用 COALESCE 函数将 NULL 值转换为 0
3. 使用 AVG 函数计算平均成绩
4. 使用 GROUP BY 分组,并按照 mno 进行排序
希望对您有所帮助!
相关问题
本题目要求编写insert语句, 在sc表中,为学号为S012的学生添加以下学生选课成绩记录。 选修C001课程,成绩为90。 选修C002课程,成绩为空。
假设sc表结构如下:
| 字段名 | 数据类型 |
| --- | --- |
| sno | varchar(10) |
| cno | varchar(10) |
| score | int |
可以使用以下SQL语句向sc表中插入新的学生选课成绩记录:
```
INSERT INTO sc (sno, cno, score)
VALUES ('S012', 'C001', 90), ('S012', 'C002', NULL);
```
其中,第一行代码向sc表中插入了学号为S012的学生选修C001课程的成绩为90的成绩记录;第二行代码向sc表中插入了学号为S012的学生选修C002课程的成绩记录,成绩为空。注意,插入空值需要使用NULL关键字。
SQL中统计每门课程的选修学生人数以及各门课程的平均成绩
可以使用如下的 SQL 语句来实现您的需求:
```sql
SELECT Course.Cname, COUNT(SC.Sno) AS num_of_students, AVG(SC.Grade) AS avg_grade
FROM Course
LEFT JOIN SC ON Course.Cno = SC.Cno
GROUP BY Course.Cname;
```
这条 SQL 语句中使用了 `LEFT JOIN` 连接了 `Course` 表和 `SC` 表,以获取每门课程的学生选课情况和成绩信息。使用 `COUNT` 函数可以统计每门课程的选修学生人数,使用 `AVG` 函数可以计算每门课程的平均成绩。最后使用 `GROUP BY` 子句对每门课程进行分组,以便于统计每门课程的选修学生人数和平均成绩。