2016-08-08 34 views
0

平均得分,我需要找到每個人的平均分數是參加了跳高事件在特定事件(如event01)查找事件在特定會議

我的表是會議,活動,RANK和我斷碼低於:

SELECT * 
FROM(
SELECT M.MEETING_ID, M.MEETING_NAME, E.EVENT_ID, E.EVENT_NAME, 
ROW_NUMBER() OVER (ORDER BY R.RESULT) RN, (SELECT AVG(RESULT) FROM RANK WHERE E.EVENT_NAME = 'HIGH JUMP' AND M.MEETING_ID = 'MEET0002') AS HG 

FROM MEETING M JOIN RANK R ON M.MEETING_ID = R.MEETING_ID 
JOIN EVENT E ON E.EVENT_ID = R.EVENT_ID 


) 

WHERE RN = 1 

預期成果:

MEETING_ID MEETING_NAME EVENT_ID EVENT_NAME AVERAGESCORE 
meet01  sports day  event01  high jump  10.6 

非常感謝所有幫助!

回答

1

這只是一個聚集查詢與過濾:

SELECT M.MEETING_ID, M.MEETING_NAME, E.EVENT_ID, E.EVENT_NAME, 
     AVG(RESULT) AS HG 
FROM MEETING M JOIN 
    RANK R 
    ON M.MEETING_ID = R.MEETING_ID JOIN 
    EVENT E 
    ON E.EVENT_ID = R.EVENT_ID 
WHERE E.EVENT_NAME = 'HIGH JUMP' AND M.MEETING_ID = 'MEET0002' 
GROUP BY M.MEETING_ID, M.MEETING_NAME, E.EVENT_ID, E.EVENT_NAME; 

您需要GROUP BY包括在結果集中的第一個四列。

0

爲什麼要在WHERE子句中篩選當您可以在JOIN本身過濾事物。

SELECT M.MEETING_ID, M.MEETING_NAME, E.EVENT_ID, E.EVENT_NAME, 
    AVG(RESULT) over (partition by E.EVENT_ID) AS avg 
FROM EVENT E 
JOIN RANK R 
ON E.EVENT_ID = R.EVENT_ID AND E.EVENT_ID = '001' AND E.EVENT_NAME='HIGH JUMP' 
JOIN 
    MEETING M 
ON M.MEETING_ID = R.MEETING_ID; 
相關問題