於每一門學分數是3學分(含)以上(i.e., Credit>=3),而且有50個(含)以上的 學生來修的課程,列出這些課程的名稱、授課老師,和該門課程裡 ,學生成績超過95分(含)的人數,假設不會有二位老師開授同一門課程。

StudentSID, SName, SAge, Address
//學生(學號、姓名、齡、地址)
TeacherTID, TName, TAge, Office#
//師(師編號、姓名、齡、辦公室)
CourseCID, CTitle, Credit
//課程(課程編號、課名、學分
TakeCID, TID, SID, Score
//修課(課程編號、師編號、學生編競、分


於每一門學分3學分(含)以上(i.e., Credit>=3),而且有50個(含)以上的
學生修的課程,出這些課程的名稱、授課師,和該門課程
,學生成績超過95分(含)的人,假設會有二位師開授同一門課程。(10分)

 解答:



SELECT W.CTitle,W.Tname,IFNULL(up,0) 95up
FROM
(SELECT P.CTitle,P.Tname,COUNT(*) up
FROM
(
SELECT TA.CID,TA.TID,CTitle,Tname,Credit,COUNT(*)
FROM Take TA,Teacher TE,Course C
WHERE TA.TID=TE.TID AND
 TA.CID=C.CID AND
                Credit>=3
GROUP BY TA.CID, TA.TID
HAVING COUNT(*)>=5
) AS P JOIN Take T
ON T.CID=P.CID AND T. TID = P. TID
WHERE score>=95
GROUP BY T.CID, T. TID
) AS Q
RIGHT JOIN
(
SELECT TA.CID,TA.TID,CTitle,Tname,Credit,COUNT(*)
FROM Take TA,Teacher TE,Course C
WHERE TA.TID=TE.TID AND
             TA.CID=C.CID AND Credit>=3
GROUP BY TA.CID, TA.TID
HAVING COUNT(*)>=5
) AS W
ON Q.CTitle=W.CTitle





留言

這個網誌中的熱門文章

數位信封 Digital Envelope

SSL的運作原理