2016-04-15 20 views
0

私はOracle DBを初めて使用していますが、フィールドAWARDが3〜4の行の合計をカウントするクエリを作成しようとしていますが、次にCOUNT()で除算する必要がありますすべての行Sqlディビジョン2集計関数

SELECT SUM(AWARD)/COUNT(*) FROM EVALUATION 
WHERE AWARD BETWEEN 2 AND 4 ; 

しかし、私はCOUNTを取得していますということを理解:これは私がAWARD = 1,0、-1など

ここでは、私が使用しようとした私のクエリであっても、行をカウントする必要があることを意味しますWHERE句に適した行のみです。私は何をすべきか?また、AWARDのSUMに値2を追加する必要がありますが、その50%になります。

+0

で除算するためにサブクエリを使用します。 – SomeJavaGuy

+0

@kevinEscheは例を挙げることができますか? – quento

+0

Oracleは 'Avg()'をサポートしています:https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions011.htm –

答えて

3

あなたはAVG()条件付き集約を使用することができます。もちろん

SELECT AVG(CASE WHEN AWARD BETWEEN 2 AND 4 THEN AWARD ELSE 0 END) 
FROM EVALUATION; 

、あなたは分裂を自分で行うことができます、あなたが本当に、本当にしたい場合は:コメントに反応して

SELECT SUM(CASE WHEN AWARD BETWEEN 2 AND 4 THEN AWARD ELSE 0 END)/COUNT(*) 
FROM EVALUATION; 

EDIT( ):

SELECT AVG(CASE WHEN AWARD = 2 THEN AWARD/2 
       WHEN AWARD BETWEEN 2 AND 4 THEN AWARD -- although 2 matches, it is caught in the first condition 
       ELSE 0 
      END) 
FROM EVALUATION; 
+0

ありがとう! 私ははるかに優雅な最初の解決策を見つけました。 AWARD = 2の場合、価値の50%で私を助けることができますか? – quento

+0

それは次のようになります:AWARD = 2 THEN AWARD/2 – quento

1

お試しください

SELECT SUM(CASE WHEN AWARD BETWEEN 2 AND 4 THEN AWARD ELSE 0 END)/COUNT(*) 
FROM EVALUATION