2012-08-22 9 views
6

Próbowałem dużo, ale nie mogę znaleźć właściwej drogi. Jeśli wybiorę wartości w PostgreSQL i zsumować je wygląda to tak:Postgres: wybierz sumę wartości, a następnie zsumuj to ponownie

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

Jak mogę zmienić to więc również podsumować wszystkie wartości w sumie? Myślę, że potrzebuję podselekcji, ale jak?

Odpowiedz

16

Spróbuj tego:

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

UPDATE Przepraszam, nie czytam, że chcesz to wszystko w tym samym zapytaniu. Z tego powodu odpowiedź jest lepsza. Jednak inna możliwość, jeśli masz wersji 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

No to powinno pomóc:

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

Jeśli chcesz wszystkie wyniki z tego samego SELECT, można zrobić coś jak

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

Mam nadzieję, że pomoże ...

Powiązane problemy