2016-06-24 32 views
0

このサブクエリを使用していて、何かを間違っているのは、LastSixMosAvgに正しい平均値が得られていないということです。平均値の合計

JOIN 
    (SELECT Avg(LastSix) as LastSixMosAvg,id 
    FROM (SELECT t.id,Sum(t.total) as LastSix 
      FROM table t 
      WHERE t.Month Between @6mosStart and @enddate 
      group by t.id)t 
    Group by id) d 
      ON d.ID=a.ID 

このクエリでは、特定のIDが返されます。

Month   Total LastSixMosAvg 
Month 1   325 1,367 
Month 2   30 1,367 
Month 3   330 1,367 
Month 4   336 1,367 
Month 5   220 1,367 
Month 6   126 1,367 

代わりLasSixMos Avgに私はあなたのクエリは合計欄の合計を平均化され$228

+0

あなたは私たちが 'JOIN'の上にあるものを知っているさせることができますか? – scsimon

+1

質問を編集し、サンプルデータと希望の結果を提供してください。あなたは明らかに混乱しています。なぜなら、あなたは両方のサブクエリに対して同じ 'group by'カラムを持っているからです。 –

+0

あなたが役に立った場合、LastSixMosAvgの実際の値はTotalの合計です。 –

答えて

2

が表示されるはずです。合計は1,367であり、IDごとに定数であるため、正しく平均化すると1,367が返されます。

は合計列自体の平均値を選択してみてください:

INNER JOIN 
(
    SELECT t.ID, Avg(t.Total) as LastSixMosAvg 
    FROM MyTable t 
    WHERE t.Month Between @6mosStart and @enddate 
    GROUP BY t.ID 
) d 
    ON d.ID = a.ID 

例:

declare @t table 
(
    [ID] int, 
    [Month] int, 
    Total int, 
    primary key clustered([ID], [Month]) 
) 
insert into @t values 
(1, 1, 325), 
(1, 2, 30), 
(1, 3, 330), 
(1, 4, 336), 
(1, 5, 220), 
(1, 6, 127) 

declare @6mosStart int = 1, @enddate int = 6 
SELECT t.ID, Avg(t.Total) as LastSixMosAvg 
FROM @t t 
WHERE t.Month Between @6mosStart and @enddate 
GROUP BY t.ID 

-- Results: 
-- ID LastSixMosAvg 
-- 1 228 
+0

ここで私の完全なクエリですが、別のアプローチが良いかもしれませんが、基本的に 'total'SELECT a.ID、Total(合計)、Month、LastSixMosAvgの合計の平均を取得する必要があります FROM v.Revenue a内部結合 (SELECT平均LastSixMosAvg、FROM ID として(LastSix)(SELECT t.ID、合計(t.Total)テーブルT FROM LastSixとしてWHERE t.Month @ 6mosStartと@ ENDDATE 基との間BYグループID)d \t \t \t ON dD = a。 ID GROUP BY a.ID、Month、LastSixMosAvg – user6506094

+0

Paul、問題は325,30,330などの金額が既に集計されていることです。AVGのみを実行すると、それを構成するすべてのトランザクションの平均を実行します要約額。 – user6506094

+0

合計の列の平均を返すと、「過去6ヶ月の平均の合計」が得られます。それはあなたが望むものではありませんか?合計列は実際にはトランザクションの合計ではありませんか? –