2012-08-22 41 views
6

我尝试了很多,但找不到正确的方法。 如果我选择在Postgres的价值观,总结他们来说,这看起来是这样的:Postgres:选择值的总和,然后再总结一遍

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

我怎样才能改变这一所以它也总结在总的所有值?我想我需要一个子选择,但是如何?

回答

16

试试这个:

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

UPDATE 对不起,我不读,你想这一切在相同的查询。为此,greg的答案更好。然而,另一种可能性,如果你有一个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

嗯,这应该可以帮助您:

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

如果你想用相同的SELECT所有的结果,你可以做类似

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

希望它有帮助...