2017-04-13 3 views
0

の平均最大を探すSQL彼らはに属しており、どのような日付は、発生行使3 columnes(attempt1、attempt2とattempt3と上映の最大平均体重を見つけるのを助ける必要があります。Oracleはねえ3回

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'は常にゼロになるか、またはnullになりますか?平均計算の一環として、それらを減算するのではなく、それらを数えることになっていますか?これが何をしているのかは分かりません。 –

+0

私は3つの列、試行1、試行2、試行3を持っています。私はそれらの3つの列のMAX(平均)が欲しいです。 – GuzziT

答えて

0

あなただけの風を使用することができます最低の平均値を得るのに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

ちょっとあなたは正しいトラックにいますが、そのクエリは正しい結果を出力しません。私は明確な理解のために質問を更新しました。 – GuzziT

関連する問題