在特定会议上查找活动的平均分数

时间:2016-08-08 01:13:28

标签: sql oracle

我需要找到参加特定赛事跳高比赛的所有人的平均分数(ex event01)

我的表是MEETING,EVENT,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

非常感谢任何帮助!

2 个答案:

答案 0 :(得分: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在结果集中包含前四列。

答案 1 :(得分:0)

为什么在可以在JOIN本身过滤事物时过滤WHERE子句。

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;