天天看點

【SQL練習】 計算并填寫學生獲得的總學分 本題目要求編寫UPDATE語句, 計算每位學生已獲得的總學分并填寫在stu表中的totalcredit字段。

資料庫上機練習

問題描述:

本題目要求編寫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`)
);      

表樣例

請在這裡給出上述表結構對應的表樣例。例如

【SQL練習】 計算并填寫學生獲得的總學分 本題目要求編寫UPDATE語句, 計算每位學生已獲得的總學分并填寫在stu表中的totalcredit字段。

cou表:

【SQL練習】 計算并填寫學生獲得的總學分 本題目要求編寫UPDATE語句, 計算每位學生已獲得的總學分并填寫在stu表中的totalcredit字段。

sc表:

【SQL練習】 計算并填寫學生獲得的總學分 本題目要求編寫UPDATE語句, 計算每位學生已獲得的總學分并填寫在stu表中的totalcredit字段。

原因分析:

這個問題解決的關鍵在于怎麼按碼,改變相應元組的其他屬性,正确的方法是用兩張表

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      

接下來的操作就是兩張表的結合了,即可得到正确答案:

正确解答

UPDATE stu,(select sno,sum(credit) SUM
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) B
SET stu.totalcredit = B.SUM
where stu.sno = B.sno      

點個關注吧,求求了,我會努力更新的。(上次的數理統計複習我會陸續上傳的)

更多内容詳見微信公衆号:Python研究所