2016-06-24 16 views
0

arbeiten mit dieser Unterabfrage und ich mache etwas falsch, wo ich nicht den richtigen Durchschnitt in der LastSixMosAvg bekomme.Summe des Durchschnitts

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 

Diese Abfrage führt zu einer bestimmten 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 

Statt in den LasSixMos Avg soll ich $228

+0

Können Sie lassen Sie uns wissen, was über dem 'JOIN' ist? – scsimon

+1

Bearbeiten Sie Ihre Frage und geben Sie Beispieldaten und gewünschte Ergebnisse an. Sie sind eindeutig verwirrt, weil Sie für beide Unterabfragen die gleiche 'group by'-Spalte haben, so dass die zweite nichts tut. –

+0

Wenn es Ihnen hilft, ist der tatsächliche Wert für LastSixMosAvg die Summe von Summe. –

Antwort

2

sehe Ihre Anfrage wird im Durchschnitt die Summe der Gesamt Spalte. Die Summe beträgt 1.367 und ist für jede ID eine Konstante, so dass die Durchschnittswertberechnung korrekt 1.367 ergibt.

Versuchen Sie, den Durchschnitt der Gesamt Säule selbst auswählen:

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 

Beispiel:

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

Also hier ist meine vollständige Abfrage, vielleicht ist ein anderer Ansatz besser, aber ich brauche im Grunde einen Durchschnitt der Summe von 'Gesamt' wählen a.ID, Summe (Gesamt) als Summe, Monat, LastSixMosAvg VON v.Revenue a INNER JOIN (SELECT Avg (LastSix) als LastSixMosAvg, ID FROM (SELECT t.ID, Sum (t.Total) als LastSix FROM Tabelle t WHERE t.Month Zwischen @ 6mosStart und @ enddate GROUP BY t.ID) t GRUPPE NACH ID) d \t \t \t EIN dD = a. ID GROUP BY a.ID, Monat, LastSixMosAvg – user6506094

+0

Paul, das Problem ist, dass diese Menge 325,30,330, etc. Summen zusammengefasst sind, wenn ich nur eine AVG ausführen wird es die Durchschneidung von jeder Transaktion, die die zusammengefasste Beträge. – user6506094

+0

Wenn Sie den Durchschnitt der Spalte Gesamt zurückgeben, erhalten Sie die durchschnittliche Summe der letzten 6 Monate. Willst du das nicht? Ist die Gesamtsumme nicht wirklich eine Summe von Transaktionen? –

Verwandte Themen