这个是题目
下面是题目中需要查询的三个数据表
->create view score_group_view
-> as
-> select student.学号,姓名,course.课程号,课程名,平时成绩*平时成绩比重+考试成绩*(1-平时成绩比重) 总成绩
-> from stu_grade
-> inner join student
-> on student.学号=stu_grade.学号
-> inner join course
-> on course.课程号=stu_grade.课程号
我最多写到这里,我实在想不到怎么实现。
。。没实际表也不好验证,只能写个大概了。。
关键在于要求每个同学的最高选课总成绩,
所以在成绩表那里要找到每个学号最高总成绩的一门课,这里用inner join最为合适
剩下的就不用多说了。感觉找最高的应该有更简单的办法,太久没写SQL了。
select a.学号,a.姓名,b.course.课程号
,c.课程名
,b.平时成绩*b.平时成绩比重+b.考试成绩*(1-b.平时成绩比重) as 总成绩
from student a
left join
(select *
,平时成绩*平时成绩比重+考试成绩*(1-b.平时成绩比重) as 总成绩
from
stu_grade)
b on a.学号 = b.学号
inner join
(select 学号,max(平时成绩*平时成绩比重+考试成绩*(1-平时成绩比重)) from
stu_grade
group by 学号 ) d
on b.学号=d.学号 and b.总成绩 = d.总成绩
left join course c
on b.course.课程号=c.课程号