这道题目要求我们查询出语文、数学、英语三科的平均成绩大于60分的学生人数。我们要做的事情如下:

1. 确定总体问题

我们需要从学生信息、课程信息和成绩信息中提取数据,计算每个学生的平均成绩,并筛选出平均成绩大于60分的学生人数。

2. 分析关键问题

  • 连接表:将StudentCourseSC表连接起来,以便获取每个学生的成绩信息。
  • 计算平均成绩:对每个学生的成绩进行平均计算。
  • 筛选符合条件的学生:筛选出平均成绩大于60分的学生。
  • 统计学生人数:计算符合条件的学生人数。

3. 解决每个关键问题的代码及讲解

步骤1:连接表

我们使用JOINStudentCourseSC表连接起来:

from
    SC
    join Student on Student.sId = SC.sId
    join Course on Course.cId = SC.cId
  • JOIN Student ON Student.sId = SC.sId:通过学生编号连接StudentSC表,以便获取学生的成绩信息。
  • JOIN Course ON Course.cId = SC.cId:通过课程编号连接CourseSC表,以便获取课程信息。
步骤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