2012-06-19 7 views
7

Ich versuche, einen Durchschnitt von Summen mit verschachtelten Aggregatfunktionen und Gruppierung zu erhalten. Was würde ich tun möchte, ist:Verschachtelte Aggregatfunktionen mit Gruppierung in Postgresql

SELECT AVG(SUM(x) GROUP BY y) WHERE ... GROUP BY ...; 

Das heißt, für jede Zeile zurückgegeben, ich will eines der Felder ein Durchschnitt von Summen sein, wobei jede Summe über die Zeilen ist, wo y gleich ist.

Ich möchte Subselects nach Möglichkeit vermeiden.

+0

"* Ich möchte Subselects wenn möglich * vermeiden". Warum? –

Antwort

12

Sie benötigen eine Unterabfrage:

select z, avg(sumval) 
from (select y, z, sum(x) as sumval 
     from t 
     group by y, z 
    ) t 
group by z 
+0

Aber dann für jede zurückgegebene Zeile, bekomme ich einen anderen z-Wert und den gleichen Durchschnittswert. Dies ist nicht das Verhalten, das ich will; Für jeden z-Wert möchte ich einen entsprechenden Durchschnitt von Summen erhalten, die zu diesem Wert von z gehören. Zum Beispiel, wenn meine Daten 'xyz 10 ag 15 ag 7 bg 8 ah 12 bh 18 bh' I erwarten haben ' z zurückgegeben, durchschnittliche g 16 h 19 ' – ferson2020

+0

Mein ursprüngliches SQL war syntaktisch falsch. Es hätte "z" als Gruppierungsvariable in der inneren Unterabfrage gehabt. Ich habe das gerade behoben. –

+0

Danke für die Hilfe. – ferson2020