2012-06-19 38 views
7

Estoy tratando de obtener un promedio de las sumas mediante el agregado de funciones de agregado y agrupamiento. Lo que me gustaría hacer es:Funciones agregadas anidadas con la agrupación en postgresql

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

Es decir, para cada fila devuelta, quiero uno de los campos a ser un promedio de sumas, donde cada suma es sobre las filas donde y es la misma.

Me gustaría evitar las subselecciones si es posible.

+0

"* Me gustaría evitar si es posible subselects *". ¿Por qué? –

Respuesta

12

Usted necesita una subconsulta:

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

Pero luego, por cada fila devuelta, obtengo un valor z diferente y el mismo valor promedio. Este no es el comportamiento que quiero; para cada valor z, quiero obtener un promedio correspondiente de sumas particular para ese valor de z. Por ejemplo, si los datos de mi es 'xyz 10 ag 15 ag 7 bg 8 ah 12 bh 18 bh' yo esperaría han regresado ' z, media g 16 h 19 ' – ferson2020

+0

Mi SQL original era sintácticamente incorrecto. Debería haber tenido "z" como una variable de agrupamiento en la subconsulta interna. Solo solucioné eso. –

+0

Gracias por la ayuda. – ferson2020

Cuestiones relacionadas