PostgreSQLのウィンドウ関数は分析関数とも呼ばれ、かなり便利な機能が揃っている。
今回はあるグループ行に順位をつけるRANKウィンドウ関数の使い方を紹介する。
まず、今回題材に使うテーブルを見ていこう。
このテーブルに、月ごとの店舗別売上ランクを新しいカラムとして追加する。
RANKウィンドウ関数の使い方
それでは早速クエリを見てみよう。
SELECT
sales_month
, shop_id
, sales_amount
, RANK() OVER (
partition by sales_month
order by sales_amount desc
) as monthly_sales_rank
FROM
monthly_sales
;
5行目のウィンドウ関数に注目すると、partition byとorder byと二つの項目がある。
partition byはgroup byとほぼ同じ意味を持ちグループ化をおこなうが、行の集約をおこなわないという特徴を持つ。
order byは通常のorder byと同様、ソート対象のカラムを指定する。
今回はdescをつけて降順指定をしているので、売上の多い順にソートすることを意味している。
最後にソートした順に順位が割り振られ、以下のような結果を得ることができる。
なお、RANKウィンドウ関数は同じ値には同じ順位を付ける仕様となっている。
例えば売上トップの店舗が同列1位の場合、順位はどちらも1位となり、次に売上の高い店舗は3位扱いとなる。