2012-06-19 11 views
7

Próbuję uzyskać średnią sum za pomocą zagnieżdżonych funkcji agregujących i grupowania. Co chciałbym zrobić, to:Zagnieżdżone funkcje agregujące z grupowaniem w postgresql

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

Oznacza to, że na każdy wiersz zwrócony, chcę jedno z pól być średnio sum, gdzie każda suma jest ponad rzędami gdzie Y jest taka sama.

Chciałbym unikać subselectów, jeśli to możliwe.

+0

"* Chciałbym uniknąć podselekcji jeśli to możliwe *". Czemu? –

Odpowiedz

12

Trzeba podkwerenda:

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

Jednak w przypadku każdego wiersza zwróconego otrzymuję inną wartość z i taką samą średnią wartość. To nie jest zachowanie, którego pragnę; dla każdej wartości z chcę uzyskać odpowiednią średnią sum w stosunku do tej wartości z. Na przykład, jeśli dane są 'XYZ AG 10 15 ag 7 BG 8 Ah 12 BH 18 bh' by się spodziewać, że zwrócone ' z, średnia g 16 h 19 ' – ferson2020

+0

Mój oryginalny kod SQL był niepoprawny pod względem składni. Powinien mieć "z" jako zmienną grupującą w wewnętrznym podzapytaniu. Właśnie to naprawiłem. –

+0

Dzięki za pomoc. – ferson2020