【SQL練習】 計算並填寫學生獲得的總學分 本題目要求編寫UPDATE語句, 計算每位學生已獲得的總學分並填寫在stu表中的totalcredit欄位。
阿新 • • 發佈:2020-11-25
此文轉載自:https://blog.csdn.net/qq_45552117/article/details/110086939
本題目要求編寫UPDATE語句, 計算每位學生已獲得的總學分並填寫在stu表中的totalcredit欄位。
其中,總學分為每個學生通過的選修課程的學分數總和,注意:只有在60分以上的選課成績才能獲得該門課程的學分數,每門課程的學分數在cou表中credit欄位。
表結構:
請在這裡寫定義表結構的SQL語句。例如:
CREATE TABLE `stu` ( `sno` char(4) NOT NULL, `sname` char(8) NOT NULL, `sex` tinyint(1) DEFAULT NULL, `mno` char(2) DEFAULT NULL, `birdate` datetime DEFAULT NULL, `memo` text, `totalcredit` smallint(6) DEFAULT NULL, PRIMARY KEY (`sno`) ); CREATE TABLE `cou` ( `cno` char(4) NOT NULL, `cname` varchar(30) NOT NULL, `credit` smallint(6) DEFAULT NULL, `ptime` char(5) DEFAULT NULL, `teacher` char(10) DEFAULT NULL, PRIMARY KEY (`cno`) ); CREATE TABLE `sc` ( `sno` char(4) NOT NULL, `cno` char(4) NOT NULL, `grade` decimal(6,1) DEFAULT NULL, `rank` char(255) DEFAULT NULL, PRIMARY KEY (`sno`,`cno`), CONSTRAINT `fk_sc_cno` FOREIGN KEY (`cno`) REFERENCES `cou` (`cno`), CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`) );
表樣例
請在這裡給出上述表結構對應的表樣例。例如
cou表:
sc表:
這個問題解決的關鍵在於怎麼按碼,改變相應元組的其他屬性,正確的方法是用兩張表
update A,B
set A.x=B.x
where A.主碼=B.主碼
那麼現在的問題是如何建立一個含有sum(credit)和sno的新表
程式碼如下
select sno,sum(credit) from( select stu.sno sno,case when sc.grade>=60 then credit else NULL end credit from stu left outer join sc on stu.sno=sc.sno left outer join cou on sc.cno=cou.cno group by stu.sno,credit,grade) a group by sno
接下來的操作就是兩張表的結合了,即可得到正確答案: