月ごとの店舗別売上高を取得する以下のようなクエリがある。
SELECT sales_month , shop_id , sales_amount FROM monthly_sales ;

この結果に、月ごとの全店舗の売上合計に占める各店舗の割合(全対比)を新しいカラムとして追加する方法を紹介する。
SUMウィンドウ関数
今回のような割合を計算する場合に有効なのがSUMウィンドウ関数だ。
先ほどのクエリを以下のように改変しよう。
SELECT sales_month , shop_id , sales_amount , CAST(sales_amount as real) / SUM(sales_amount) OVER ( partition by sales_month ) as sales_ratio FROM monthly_sales ;
ポイントは5〜7行目。
まず、割合を計算するためsales_amountをreal型にキャストしている。
SQLは整数同士で除算すると小数が切り捨てられるため、これは必要な処理だ。
次にSUM関数の後にOVERと書かれているが、これがSUMウィンドウ関数となる。
partition byにグループ化する対象となるカラムsales_monthを指定しており、これによって月ごとの売上合計が算出され、各店舗の売上の全対比を算出することができる。

クエリを実行すると、上記のように全対比を得ることができた。