我試圖解決這個練習,但是在顯示CCode時我的學生平均人數最多。我附上了練習的圖片和資料庫表。提前致謝。

這是我的代碼:
SELECT CO.TCode, CO.CCode
FROM COURSE CO
WHERE CO.CCode NOT IN(
SELECT CCode
FROM COURSE
WHERE Topic <> 'database')
AND CO.CCode =(
SELECT C1.CCode
FROM (SELECT CCode, AVG(AttendingStudent#) MEDIA
FROM LECTURE
GROUP BY CCode) C1
WHERE MAX(C1.MEDIA) AND C1.CCode = CO.CCode
)
我認為WHERE子句中的最大值不起作用。
uj5u.com熱心網友回復:
從 Oracle 12 開始,您可以訂購子查詢并使用FETCH FIRST ROW ONLY來獲得最大值(或者FETCH FIRST ROW WITH TIES如果有最高的連接,但您需要從=比較更改為IN)。
SELECT CO.TCode,
CO.CCode
FROM COURSE CO
WHERE CO.CCode NOT IN( SELECT CCode
FROM COURSE
WHERE Topic <> 'database')
AND CO.CCode = ( SELECT c.CCode
FROM Course c
INNER JOIN LECTURE l
ON (c.ccode = l.ccode)
WHERE l.TCode = CO.TCode
GROUP BY CCode
ORDER BY AVG(AttendingStudent#) DESC
FETCH FIRST ROW ONLY
)
否則,您可以使用HAVING子句:
SELECT CO.TCode,
CO.CCode
FROM COURSE CO
WHERE CO.CCode NOT IN( SELECT CCode
FROM COURSE
WHERE Topic <> 'database'
)
AND CO.CCode IN ( SELECT CCode
FROM (
SELECT TCode,
CCode,
AVG(AttendingStudent#) MEDIA
FROM LECTURE
GROUP BY TCode, CCode
) C1
WHERE c1.TCode = CO.TCode
HAVING c1.MEDIA = MAX(C1.MEDIA)
)
注意:您的第一個子查詢不正確,因為您想找到沒有教過非資料庫課程而不是非資料庫課程的老師。這幾乎是正確的,因為您只需要更改要比較的列,但我相信您可以更正它。
uj5u.com熱心網友回復:
嘗試使用以下作為子查詢:
SELECT C1.CCode
FROM (SELECT CCode,
AVG(AttendingStudent#) MEDIA
FROM LECTURE
GROUP BY CCode) C1
GROUP BY C1.CCode
HAVING MAX(C1.MEDIA) AND C1.CCode = CO.CCode
您將在“C1.MEDIA”上進行聚合并在“ C1.CCode ”上進行分組,但聚合只會發生在子句內,只留下代碼供選擇。HAVING
這里有一些關于如何使用HAVING子句的提示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/489465.html
