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位扱いとなる。