[英]Sub Query SQL Oracle
我需要創建一個子查詢,以顯示每個模塊的最高成績的學生的student_id,student_first_name,module_name和數學成績(主題“ Maths”)。 學生表通過student_id鏈接到成績表,並且module_name,成績和科目存儲在成績表中。 但是我所擁有的似乎並不正確
SELECT S.STUDENT_ID, S.LAST_NAME, G.SECTION_ID, G.MODULE_NAME, G.GRADE
FROM STUDENT S, GRADE G
WHERE S.STUDENT_ID = G.STUDENT_ID
AND G.GRADE IN (SELECT MAX(GRADE) FROM GRADE G WHERE G.Subject = 'Maths')
嘗試以下查詢
SELECT S.STUDENT_ID, S.LAST_NAME, G.SECTION_ID, G.MODULE_NAME, G.GRADE
FROM STUDENT S
JOIN GRADE G ON S.STUDENT_ID = G.STUDENT_ID
JOIN (
SELECT G.MODULE_NAME, MAX(G.GRADE) max_grade
FROM GRADE G
WHERE G.Subject = 'Maths'
GROUP BY G.MODULE_NAME
) t ON G.MODULE_NAME = t.MODULE_NAME and
G.GRADE = t.max_grade and
G.Subject = 'Maths'
無需為此使用子查詢。 一種解決方案是解析函數:
SELECT SG.STUDENT_ID, SG.LAST_NAME, SG.SECTION_ID, SG.MODULE_NAME, SG.GRADE
FROM (SELECT S.STUDENT_ID, S.LAST_NAME, G.SECTION_ID, G.MODULE_NAME, G.GRADE,
MAX(G.GRADE) OVER (PARTITION BY MODULE_NAME) as MAX_GRADE
FROM STUDENT S JOIN
GRADE G
ON S.STUDENT_ID = G.STUDENT_ID
WHERE G.Subject = 'Maths'
) sg
WHERE GRADE = MAX_GRADE;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.