10-27 插入学生总学分表 (10 分)

该博客介绍了如何使用SQL的Insert语句,结合Left Join和Case When子句,来计算每个学生的所有课程学分总和。当学生的某门课程成绩大于等于60时,该课程的学分才会被计入总学分。如果学生没有任何课程记录,其总学分则记为0。查询结果将按照学号进行升序排序,并将数据插入到totalcredit表中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本题目要求编写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;
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值