今回は、あるテーブルを自分自身とジョインするセルフジョインを使って、売上の前年比を求める方法を紹介する。

今回使うテーブルは以下のyearly_salesテーブル。

このテーブルでセルフジョインを実行する例を見てみよう。

まず、第一段階としてテーブルを結合するところまでやってみた。

SELECT
	*
FROM
	yearly_sales as curr
	LEFT JOIN yearly_sales as prev
	ON curr.year - 1 = prev.year
		AND curr.shop_id = prev.shop_id
;

JOIN対象のテーブルは自分自身で、ON句の条件で「年」を合わせるためにcurr.yearから1を引いている。
この結果を見てみよう。

4〜6行目を見ると、同じ行に前年同月の売上データが並んでいる。
これで前年比を求める準備は整った。

次に、SELECT文の中身を以下のとおり書き換える。

SELECT
	curr.year
	, curr.shop_id
	, CAST(curr.sales_amount as real) / prev.sales_amount as growth_rate
FROM
	yearly_sales as curr
	LEFT JOIN yearly_sales as prev
	ON curr.year - 1 = prev.year
		AND curr.shop_id = prev.shop_id
;

4行目で前年比を算出する際にCASTを用いて型変換をおこなっているが、これがないと整数除算されてしまい、正しい結果が求められない。

上記のクエリを実行すると以下の結果が得られる。

2012年の行は前年のデータがないためNullとなっているが、2013年の行で売上の前年比が求められている。

前年比の数字を求めるケースは分析作業においてよくあるので、セルフジョインを用いたこのテクニックは覚えておきたいところ。