查询成绩高于该门课程平均分的学生的学号、姓名和成绩,写出相应的SQL查询语句
(课程表中只有学号,课程号,和成绩。每门课程的平均分需要另外计算)
select S.studentNo,studentName,score
from Student S join Score on S.studentNo=Score.studentNo
join Course on Course.courseNo=Score.courseNo
join (select AVG(score) gg ,courseNo /*求AVG得用子查询*/
from Score join student H on Score.studentNo=H.studentNo
/*group by courseNo 把课程号相同的分到一组计算成绩的平均值,即每门课的平均分*/
group by courseNo) G on G.courseNo=Course.courseNo where score>gg
/*把子查询的结果连接上去之后,每个不同的课程号都会有一个平均分,取分数大于平均分的*/
查询结果:
Ps:因为题目要求要输出成绩,所以这里会有一个学生输出多次的情况
把子查询的结果连接上去之后,再加个where就可以解决复杂查询了