今回は、あるテーブルを自分自身とジョインするセルフジョインを使って、売上の前年比を求める方法を紹介する。
今回使うテーブルは以下の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年の行で売上の前年比が求められている。
前年比の数字を求めるケースは分析作業においてよくあるので、セルフジョインを用いたこのテクニックは覚えておきたいところ。