2012-08-22 23 views
6

Probé mucho pero no puedo encontrar el camino correcto. Si selecciono valores en Postgres y la suma de ellos se parece a esto:Postgres: seleccione la suma de valores y luego sume esto de nuevo

SELECT name,sum(size) as total 
FROM mytable group by name order by name; 

¿Cómo puedo alterar este por lo que también suma todos los valores en total? Creo que necesito una subselección, pero ¿cómo?

Respuesta

16

Prueba esto:

SELECT sum(a.total) 
FROM (SELECT sum(size) as total 
     FROM mytable group by name) a 

ACTUALIZACIÓN Lo siento, yo no leo que desea que todos en la misma consulta. Por esta razón, la respuesta de greg es mejor. Sin embargo, otra posibilidad si tiene una versión de PostgreSQL> = 9:

WITH mytableWith (name, sum) as 
    (SELECT name, sum(size) 
     FROM mytable 
     GROUP BY name) 
SELECT 'grand total' AS name, 
     sum(sum) AS sum 
FROM mytableWith 
UNION ALL 
SELECT name, sum 
FROM mytableWith 
2

Bueno, esto debería ayudar a:

select sum(innerselect.innertotal) as outertotal from 
    (select sum(size) as innertotal from mytable group by name) as innerselect 
3

Si desea que todos los resultados con la misma selección, podía hacer algo como

SELECT 
    'grand total' AS name, 
    sum(size) AS sum 
FROM 
    mytable 
UNION ALL 
SELECT 
    name, 
    sum(size) AS sum 
FROM 
    mytable 
GROUP BY 
    name; 

Espero que ayude ...

Cuestiones relacionadas