2017-04-13 60 views
0

嘿需要與發現三個columnes(attempt1,ATTEMPT2和attempt3以及哪些行使他們屬於他們發生了什麼日期最大平均體重有所幫助。的Oracle SQL查找最大平均三次

ATM,結果下面的查詢輸出,所有的練習,他們發生的所有日期和所有的平均體重,我希望它選擇最大平均體重,它屬於的練習和它發生的日期,附加是查詢的結果,我想成爲輸出。 Result of query

SELECT e.exercise_description 
, occ.occ_date, (COALESCE(OE.ATTEMPT1, 0) 
+ COALESCE(OE.ATTEMPT2, 0) 
    + COALESCE(OE.ATTEMPT3, 0)) 
    /(3 -(COALESCE(OE.ATTEMPT1 - OE.ATTEMPT1, 1) 
    + COALESCE(OE.ATTEMPT2 - OE.ATTEMPT2, 1) 
    + COALESCE(OE.ATTEMPT3 - OE.ATTEMPT3, 1)) 
) AS row_avg 
    FROM EXERCISE E INNER JOIN Occurrence_Exercise OE 
    ON E.EXERCISEID=OE.EXERCISEID 
    INNER JOIN OCCURRENCE OCC ON OE.OCCURRENCEID=OCC.OCCURRENCEID; 
+1

我刪除了MySQL標籤。您應該顯示示例數據或至少提供背景以瞭解您是如何到達當前查詢的。 –

+0

當然'OE.ATTEMPT1 - OE.ATTEMPT1'總是爲零或爲空?作爲平均計算的一部分,你是否應該計算這些值而不是減去它們?很難說這應該是什麼。 –

+0

我有三列,attempt1,attempt2和attempt3。我想要這三列的MAX(平均)。 – GuzziT

回答

0

你可以使用風ow row_number()函數得到最大平均值的一個

SELECT e.exercise_description 
    , occ.occ_date 
    FROM 
     (SELECT oe.exerciseid 
      , oe.occurrenceid 
      , ROW_NUMBER() OVER(ORDER BY (COALESCE(oe.attempt1, 0) + COALESCE(oe.attempt2, 0)+ COALESCE(oe.attempt3, 0)) 
             /(NVL2(oe.attempt1, 1, 0) + NVL2(oe.attempt2, 1, 0) + NVL2(oe.attempt3, 1, 0)) 
           ) AS rn 
     FROM Occurrence_Exercise oe 
    ) srt 
INNER JOIN exercise e 
    ON srt.exerciseid=e.exerciseid 
INNER JOIN occurrence occ 
    ON srt.occurrenceid=occ.occurrenceid 
WHERE srt.rn = 1 
+0

嘿你在正確的軌道上,但該查詢dosn't輸出正確的結果。我已經更新了這個問題,以便理解。 – GuzziT