web-dev-qa-db-ja.com

Postgres:値の合計を選択してから、これをもう一度合計します

たくさん試しましたが、正しい方法が見つかりません。 Postgresで値を選択して合計すると、次のようになります。

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

これを変更して、すべての値を合計するようにするにはどうすればよいですか?副選択が必要だと思いますが、どうすればよいですか?

9
t Book

これを試して:

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
23
doctore

POSTGRESQLでROLLUP関数を使用します。

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

これにより、集計した値の総計が得られ、複数の列の集計にも使用できます。

それが役に立てば幸い!

4
oyeoyeoye

同じ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;

それが役に立てば幸い…

3
greg

まあこれはあなたを助けるはずです:

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