簡體   English   中英

子查詢SQL Oracle

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM