毎月の売上データなど時系列データをグラフ化すると日々の変動により、たいていの場合ジグザグの激しいグラフが出来上がる。

出来上がったグラフを見ていると、例えば先月より値が小さくなった時、それが本当に業績が落ちているのか、単に変動要因によるものなのか、判断しかねるケースがある。

このような場合に有効なのが移動平均を取ることだ。

移動平均とは

移動平均は、直近n個のデータの平均をその時点の値とする計算手法で、細かい変動要因をならしてグラフを滑らかにすることができる。

毎月の売上データを見る時も、移動平均ベースでデータを見ることで日々の変動をある程度打ち消すことができ、より正確な判断がおこなえる。

移動平均を計算するSELECT文

まず、以下のようなmonthly_salesというテーブルがある。

このテーブルにmoving_avgという新たなカラムとして移動平均値を与えていく。

01
02
03
04
05
06
07
08
09
10
11
12
SELECT
    sales_month
    , shop_id
    , sales_amount
    , AVG(sales_amount) OVER (
        partition by shop_id
        order by sales_month
        rows between 5 preceding and current row
    ) moving_avg
FROM
    monthly_sales
;

まず、AVGウィンドウ関数のpartition byとorder byで店舗ごとにグルーピングをおこなう。

次に8行目、rows between 5 preceding and current rowで、前の行を5行分と現在処理中の行、つまり6行分のデータから平均値を取っている。

このクエリを実行すると以下のとおり移動平均を取得することができる。