这道题目要求我们查询出语文、数学、英语三科的平均成绩大于60分的学生人数。我们要做的事情如下:
1. 确定总体问题
我们需要从学生信息、课程信息和成绩信息中提取数据,计算每个学生的平均成绩,并筛选出平均成绩大于60分的学生人数。
2. 分析关键问题
- 连接表:将
Student
、Course
和SC
表连接起来,以便获取每个学生的成绩信息。 - 计算平均成绩:对每个学生的成绩进行平均计算。
- 筛选符合条件的学生:筛选出平均成绩大于60分的学生。
- 统计学生人数:计算符合条件的学生人数。
3. 解决每个关键问题的代码及讲解
步骤1:连接表
我们使用JOIN
将Student
、Course
和SC
表连接起来:
from
SC
join Student on Student.sId = SC.sId
join Course on Course.cId = SC.cId
JOIN Student ON Student.sId = SC.sId
:通过学生编号连接Student
和SC
表,以便获取学生的成绩信息。JOIN Course ON Course.cId = SC.cId
:通过课程编号连接Course
和SC
表,以便获取课程信息。
步骤2:计算平均成绩
我们使用AVG
函数对每个学生的成绩进行平均计算:
where
Course.cname = '语文' or Course.cname = '数学' or Course.cname = '英语'
group by
Student.sId
having
avg(SC.score) > 60
WHERE(...)
:筛选出语文数学和英语三门课。GROUP BY Student.sId
:按学生编号分组,以便计算每个学生的平均成绩。HAVING AVG(SC.score) > 60
:筛选出平均成绩大于60分的学生。
步骤3:统计学生人数
我们使用COUNT
函数计算符合条件的学生人数:
select
count(*)
from(
-- 子查询
)s
COUNT(*)
:计算符合条件的学生人数。
完整代码
select
count(*)
from(
select
Student.sId
from
SC
join Student on Student.sId = SC.sId
join Course on Course.cId = SC.cId
where
Course.cname = '语文' or Course.cname = '数学' or Course.cname = '英语'
group by
Student.sId
having
avg(SC.score) > 60
)s