PostgreSQLで最近知った便利なSQLを紹介しよう。

以下のようなテーブルがあるとする。

このようなテーブルの各行に、新たに全体の数量に対する割合を表示させたい場合がある。

まずは目標物から見ていこう。

割合は「数量 / 全体数量」で求められるので、例えば一番上の行を確認すると「数量112 / 全体数量253」の結果、正しい割合が求められていることが分かる。

全体数量の求め方

全体数量は以下のSQLで求めることができる。

SUM(数量) OVER ()

これを既存のSQLに組み込むと次のとおりとなる。

SELECT
	数量
 	, SUM(数量) OVER () as 全体数量
FROM
 	...

割合の求め方

全体数量が算出できたので、あとは割合を求める式に当てはめるだけだ。

SELECT
	数量
	, 数量 / SUM(数量) OVER () as 割合
FROM
 	...

ちょっとしたSQLの改変で簡単に割合を求めることができた。

ただ、今回紹介した方法はPostgreSQLのウィンドウ関数を利用したもので、ウィンドウ関数の使えないMySQLなどでは使えないので注意が必要だ。