PostgreSQLで最近知った便利なSQLを紹介しよう。
以下のようなテーブルがあるとする。

このようなテーブルの各行に、新たに全体の数量に対する割合を表示させたい場合がある。
まずは目標物から見ていこう。

割合は「数量 / 全体数量」で求められるので、例えば一番上の行を確認すると「数量112 / 全体数量253」の結果、正しい割合が求められていることが分かる。
全体数量の求め方
全体数量は以下のSQLで求めることができる。
SUM(数量) OVER ()
これを既存のSQLに組み込むと次のとおりとなる。
SELECT
数量
, SUM(数量) OVER () as 全体数量
FROM
...

割合の求め方
全体数量が算出できたので、あとは割合を求める式に当てはめるだけだ。
SELECT
数量
, 数量 / SUM(数量) OVER () as 割合
FROM
...

ちょっとしたSQLの改変で簡単に割合を求めることができた。
ただ、今回紹介した方法はPostgreSQLのウィンドウ関数を利用したもので、ウィンドウ関数の使えないMySQLなどでは使えないので注意が必要だ。