本题目要求编写SQL语句, 统计各专业的学生选课的平均成绩,如果某专业尚未有任何学生选修课程或成绩为空时,平均分计为0。输出结果集按照major表中的mno升序排序。
时间: 2024-02-13 20:05:30 浏览: 148
好的,根据您的要求,以下是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 进行排序
希望对您有所帮助!
相关问题
本题目要求编写SQL语句, 查找所有开设的课程及被学生选修的情况(选课人数,最高成绩,最低成绩,平均成绩),如某门课程尚未有学生选修时也要列出来。
为了满足您的需求,我们可以创建一个SQL查询来获取每个课程的信息以及相关的统计数据(如果有选修的学生)。假设我们有两个表,一个是`courses`,存储课程信息,另一个是`enrollments`,记录学生的选课情况。`students`表包含学生ID,`scores`表存储每个学生的分数。这里是一个示例查询:
```sql
SELECT
c.course_id,
c.course_name,
COUNT(e.student_id) AS num_students,
MIN(s.score) AS min_score,
MAX(s.score) AS max_score,
AVG(s.score) AS avg_score
FROM
courses c
LEFT JOIN
enrollments e ON c.course_id = e.course_id
LEFT JOIN
scores s ON e.student_id = s.student_id
GROUP BY
c.course_id, c.course_name;
```
这个查询做了以下几件事:
1. 使用`LEFT JOIN`连接了`courses`和`enrollments`表,这样即使某门课程没有学生选修,也会显示出来,并设置其对应的学生数为0。
2. 再次使用`LEFT JOIN`将`enrollments`表和`scores`表关联起来,获取学生的分数。
3. 对每个课程计算选修的学生数、最低分、最高分和平均分。
10-226 查找课程选修的情况 分数 10 作者 张庆 单位 集美大学 本题目要求编写SQL语句, 查找所有开设的课程及被学生选修的情况(选课人数,最高成绩,最低成绩,平均成绩),如某门课程尚未有学生选修时也要列出来。
根据您的描述,这是一个数据库查询的问题,特别是针对教学管理系统中的数据。对于查询"10-226"课程的所有选修信息,假设我们有一个包含课程信息和选课信息的数据库,可以使用SQL语句类似这样:
```sql
SELECT
c.course_id AS '课程编号',
c.course_name AS '课程名称',
COUNT(s.student_id) AS '选修人数',
MAX(sc.score) AS '最高成绩',
MIN(sc.score) AS '最低成绩',
AVG(sc.score) AS '平均成绩'
FROM
courses c
LEFT JOIN
student_courses sc ON c.course_id = sc.course_id
LEFT JOIN
students s ON sc.student_id = s.student_id
WHERE
c.course_id = '10-226'
GROUP BY
c.course_id, c.course_name;
```
这个SQL语句做了以下几个步骤:
1. 从`courses`表中选取`course_id`和`course_name`字段作为课程的基本信息。
2. 使用`LEFT JOIN`将`courses`表与`student_courses`(记录学生选课信息)和`students`表连接,这样即使没有学生选修也能列出课程。
3. `WHERE`子句指定我们要查询的是课程ID为"10-226"的课程。
4. `COUNT`, `MAX`, `MIN`, 和 `AVG`函数分别计算选修人数、最高分、最低分和平均分。
5. `GROUP BY`按照课程ID和名称分组,确保每个课程的数据汇总在一起。
请注意,具体的字段名和表结构可能因实际数据库的不同而有所差异。如果"10-226"不存在或者没有选修记录,结果中的相应计数和成绩值会显示为NULL。
阅读全文