)查询没有选修K001和M001课程的学号、课程号和三次成绩(使用子 查询)。
时间: 2024-09-29 17:05:28 浏览: 62
查询没有选修K001和M001课程的学号、课程号以及这三门课程的平均成绩,可以使用子查询结合NOT IN条件来实现。假设我们有一个名为"student_scores"的表,包含字段:student_id(学生ID)、course_id(课程ID)和score(成绩)。以下是SQL查询的示例:
```sql
SELECT s.student_id, sc.course_id, AVG(sc.score) AS average_score
FROM student_scores s
LEFT JOIN (
SELECT course_id
FROM student_scores
WHERE course_id IN ('K001', 'M001')
) subquery ON s.course_id = subquery.course_id
WHERE s.course_id NOT IN ('K001', 'M001')
GROUP BY s.student_id, sc.course_id;
```
这个查询首先创建了一个内部子查询,找出所有选修了K001或M001的学生。然后,外部查询从student_scores表中选择那些不在这个子查询结果中的课程,并计算每个学生的非K001和M001课程的平均成绩。
相关问题
sqlserver,有一张学生作业表,有3列:课程号、学号、成绩。同一个学号可能会对应多个课程号,如何查询没有选修课程号K001和K002的学生的学号、成绩,请用子查询
可以使用子查询和 NOT IN 来查询没有选修课程号 K001 和 K002 的学生的学号和成绩,SQL语句如下:
```
SELECT 学号, 成绩
FROM 学生作业表
WHERE 学号 NOT IN (
SELECT 学号
FROM 学生作业表
WHERE 课程号 IN ('K001', 'K002')
)
```
这个子查询会先找出选修了课程号 K001 或 K002 的学生,然后外层查询使用 NOT IN 找出没有选修这些课程的学生。
在作业表,学生表,课程表中.查询没有作业成绩的学号和课程号。 10.查询学号为0538的学生的作业1总分。 11.查询选修了K001课程的学生人数。 12.查询数据库中共有多少个班级。 13.查询选修三门以上(含三门)课程的学生的学号和作业1平均分、作业2平均分和作业3平均分。
好的,我会根据您的要求进行回答。以下是您的问题的答案:
10. 查询学号为0538的学生的作业1总分。
```sql
SELECT SUM(score) AS '作业1总分'
FROM 作业表
WHERE 学号 = '0538' AND 作业编号 = '作业1';
```
11. 查询选修了K001课程的学生人数。
```sql
SELECT COUNT(DISTINCT 学号) AS '选修K001课程的学生人数'
FROM 学生表
WHERE 学号 IN (SELECT 学号 FROM 选课表 WHERE 课程号 = 'K001');
```
12. 查询数据库中共有多少个班级。
```sql
SELECT COUNT(DISTINCT 班级) AS '班级数量'
FROM 学生表;
```
13. 查询选修三门以上(含三门)课程的学生的学号和作业1平均分、作业2平均分和作业3平均分。
```sql
SELECT 学号, AVG(CASE WHEN 作业编号 = '作业1' THEN score END) AS '作业1平均分',
AVG(CASE WHEN 作业编号 = '作业2' THEN score END) AS '作业2平均分',
AVG(CASE WHEN 作业编号 = '作业3' THEN score END) AS '作业3平均分'
FROM 作业表
WHERE 学号 IN (
SELECT 学号
FROM 选课表
GROUP BY 学号
HAVING COUNT(DISTINCT 课程号) >= 3
)
GROUP BY 学号;
```
希望这些答案能帮到您!如果您还有其他问题,可以继续向我提问。
阅读全文