1、学生表:学号、班级、姓名 2、选课表:学号、课程 3、成绩表:学号、课程、成绩 问题: 1、统计每个学生的平均分(结果包含学号、平均分2个字段) 2、统计平均分及格(60分以上)的学生(结果包含学号、平均分2个字段) 3、统计每个班级及格人数和不及格人数(结果包含班级、及格人数、不及格人数3个字段)
时间: 2023-07-10 20:41:19 浏览: 71
以下是针对您提出的三个问题的SQL语句:
1. 统计每个学生的平均分(结果包含学号、平均分2个字段)
```
SELECT 学号, AVG(成绩) AS 平均分 FROM 成绩表 GROUP BY 学号;
```
2. 统计平均分及格(60分以上)的学生(结果包含学号、平均分2个字段)
```
SELECT 学号, AVG(成绩) AS 平均分 FROM 成绩表 WHERE 成绩 >= 60 GROUP BY 学号;
```
3. 统计每个班级及格人数和不及格人数(结果包含班级、及格人数、不及格人数3个字段)
```
SELECT 学生表.班级,
COUNT(CASE WHEN 成绩表.成绩 >= 60 THEN 1 ELSE NULL END) AS 及格人数,
COUNT(CASE WHEN 成绩表.成绩 < 60 THEN 1 ELSE NULL END) AS 不及格人数
FROM 学生表
LEFT JOIN 选课表 ON 学生表.学号 = 选课表.学号
LEFT JOIN 成绩表 ON 选课表.学号 = 成绩表.学号 AND 选课表.课程 = 成绩表.课程
GROUP BY 学生表.班级;
```
解释一下以上SQL语句的含义:
- 对于问题1和问题2,我们都是从成绩表中获取学生的成绩信息,并按照学号进行分组。问题2中,我们在WHERE子句中添加了一个成绩大于等于60的条件,以过滤掉不及格的成绩。
- 对于问题3,我们需要先将学生表、选课表和成绩表进行关联,以获取每个班级的及格和不及格人数。我们使用LEFT JOIN关键字,将学生表作为左表,选课表和成绩表作为右表,通过学号和课程进行关联。然后,我们使用COUNT和CASE WHEN语句对成绩进行分类计数,得到及格和不及格人数。最后,我们使用GROUP BY关键字将结果按照班级进行分组。
希望以上回答能够解决您的问题!
阅读全文