2017-05-04 11 views
3

変数の正確な平均を計算する方法を理解しようとしています。 は現在、私はこのクエリを持っている:(簡体字):条件付き平均値

select ID , Group_ID, Chargeability,Job_No_, Group_Charg FROM Data1 


ID  Group ID  Chargeability  Job No_  Group Chargeability 
1    a    90    c1     88.11 
1    a    90    c2     88.11 
1    a    90    c3     88.11 
1    a    90    c4     88.11 
2    a    85.6    c8     88.11 
2    a    85.6    c17    88.11 
2    a    85.6    c6     88.11 

計算した平均が実際のものではありません。 Chargeabilityは各IDごとに固定されているので、各IDごとにjob_Noのlotzがあるので、平均値はIDごとの行数を考慮してはいけません。

私は現在行っているように(90 * 4)+(85.6 * 3)/ 7の代わりにGroup_chargeability =(90 + 85.6)/ 2を持っています。

クエリはいくつかのサブクエリで構成され、それらのうちのいくつかは関数も呼び出す。これは、私が持っている問題を解決しようとするためにグループを使用することができない理由です。

+0

平均(GROUP_IDによるパーティション分割) '?あなたがグループごとに平均を求めていると仮定します...私は信じています。 ID 1と3の両方が同じグループ内で同じ充電可能性を持っていたら、あなたは平均したいと思う方法を誤ってしまうかもしれません... – xQbert

答えて

2

あなたはこのような参加サブクエリ使用して試すことができますSUB QUERY

SELECT d.ID, d.Group_ID, d.Chargeability, d.Job_No_, 
AVG(SELECT MIN(sub.Chargeability) 
FROM Data1 sub 
WHERE sub.id = d.id AND sub.Job_No_ = d.Job_No_ 
GROUP BY sub.ID) AS GROUP_Chargeability 
FROM Data1 
1

AVG機能を使用します。全体の平均chargabilityを計算するには

SELECT d.ID, d.GROUP_ID, d.CHARGEABILITY, d.JOB_NO_, d2.charges 
FROM Data1 d LEFT JOIN 
(SELECT DISTINCT ID, GROUP_ID, AVG(CHARGEABILITY) AS CHARGES FROM Data1) d2 
    ON d2.ID = d.ID AND d2.GROUP_ID = d.GROUP_ID 
1

を:

select avg(Chargeability) as avgChargeability 
from (select id, avg(Chargeability) as Chargeability 
     from t 
     group by id 
    ) id; 

あなたはを使用して各行にこの値を設定できますまたはサブクエリ。

関連する問題