今回は、あるテーブルを自分自身とジョインするセルフジョインを使って、売上の前年比を求める方法を紹介する。
今回使うテーブルは以下のyearly_salesテーブル。
![](https://i0.wp.com/chusotsu-program.com/wp-content/uploads/2020/09/image-22.png?resize=594%2C412&ssl=1)
このテーブルでセルフジョインを実行する例を見てみよう。
まず、第一段階としてテーブルを結合するところまでやってみた。
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を引いている。
この結果を見てみよう。
![](https://i0.wp.com/chusotsu-program.com/wp-content/uploads/2020/09/image-23.png?resize=1024%2C356&ssl=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を用いて型変換をおこなっているが、これがないと整数除算されてしまい、正しい結果が求められない。
上記のクエリを実行すると以下の結果が得られる。
![](https://i0.wp.com/chusotsu-program.com/wp-content/uploads/2020/09/image-24.png?resize=652%2C398&ssl=1)
2012年の行は前年のデータがないためNullとなっているが、2013年の行で売上の前年比が求められている。
前年比の数字を求めるケースは分析作業においてよくあるので、セルフジョインを用いたこのテクニックは覚えておきたいところ。