月ごとの店舗別売上高を取得する以下のようなクエリがある。
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を指定しており、これによって月ごとの売上合計が算出され、各店舗の売上の全対比を算出することができる。
クエリを実行すると、上記のように全対比を得ることができた。