本题目要求编写Insert语句, 计算每位同学获得的总学分,并将所有学生的总学分按学号升序排序后一起插入到totalcredit表中。
注意:
1)当某门课程成绩在60分以上时才能合计计入总学分
2)如果某学生尚未选修任何课程时,总学分计为0,并插入到totalcredit表中。
Insert into totalcredit
select sno,sum(credit) totalcredit
from (
select stu.sno sno,case when sc.grade >= 60 then credit else 0 end credit
#这里的case语句判断是>=60,可以直接解决null存在的情况
from stu left join sc#null的存在需要使用外连接
on stu.sno=sc.sno#匹配相同的字段
left join cou
on cou.cno=sc.cno
group by stu.sno,sc.cno
/*这里分组的思路可以通过画图解决,先进行sno的分组,而不同的学号的课程可以有很多,
因此就是需要在学号分完组以后再在学号的基础上进行一次分组,分组出不同的课程
(不能单独是grade或者credit,存在重复的数据导致分组出现bug)
即可以是cno或者(grade,credit)来进行分组
*/
) a#这里的要求起个别名
group by sno;