於每一門學分數是3學分(含)以上(i.e., Credit>=3),而且有50個(含)以上的 學生來修的課程,列出這些課程的名稱、授課老師,和該門課程裡 ,學生成績超過95分(含)的人數,假設不會有二位老師開授同一門課程。
Student(SID, SName, SAge, Address)
//學生(學號、姓名、年齡、地址)
Teacher(TID, TName, TAge, Office#)
//老師(老師編號、姓名、年齡、辦公室)
Course(CID, CTitle, Credit)
//課程(課程編號、課名、學分數)
Take(CID, 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
留言
張貼留言