移動平均またはローリング平均を使用すると、過去7日間などの移動期間の平均を計算できます。時間の経過に伴う移動平均を計算すると、毎日の数値を追跡する場合と比較して、よりスムーズな傾向が得られます。 PostgreSQLで移動平均を計算するためのSQLクエリは次のとおりです。
PostgreSQLで移動平均を計算する方法
PostgreSQLで移動平均を計算する方法は次のとおりです。次の表があるとします
postgres=# create table sales(order_date date,sale int); postgres=# insert into sales values('2020-04-01',210), ('2020-04-02',125),('2020-04-03',150),('2020-04-04',230), ('2020-04-05',200),('2020-04-10',220),('2020-04-06',25), ('2020-04-07',215),('2020-04-08',300),('2020-04-09',250); postgres=# select * from sales; order_date | sale ------------+------ 2020-04-01 | 210 2020-04-02 | 125 2020-04-03 | 150 2020-04-04 | 230 2020-04-05 | 200 2020-04-10 | 220 2020-04-06 | 25 2020-04-07 | 215 2020-04-08 | 300 2020-04-09 | 250
ボーナスリード:PostgreSQLでCSVファイルをインポートする方法
過去5日間のPostgreSQLの移動平均を計算するとします。 PostgreSQLでは、ウィンドウ関数を使用して移動平均を計算できます。過去5日間のPostgreSQLの移動平均を計算するためのクエリは次のとおりです。詳細を見ていきます
SELECT a.order_date,a.sale, AVG(a.sale) OVER(ORDER BY a.order_date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) AS avg_sales FROM sales a ; order_date | sale | avg_sales ------------+------+---------------------- 2020-04-01 | 210 | 210.00 2020-04-02 | 125 | 167.50 2020-04-03 | 150 | 161.66 2020-04-04 | 230 | 178.75 2020-04-05 | 200 | 183.00 2020-04-06 | 25 | 146.00 2020-04-07 | 215 | 164.00 2020-04-08 | 300 | 194.00 2020-04-09 | 250 | 198.00 2020-04-10 | 220 | 202.00
上記のクエリでは、AVG関数は saleの平均値を計算します 桁。ウィンドウ関数OVERで使用すると、定義された時間ウィンドウの平均のみが計算されます。
PostgreSQLで移動平均を計算するには、最初にORDERBY句を使用して行を時系列で並べ替えます。次に、4つの前の行と現在の行の間の行を使用して、平均を計算するためのウィンドウを定義します。これは、各行について、現在の行と前の4行のみの平均を計算することを意味します。したがって、各行について、過去5日間の値のみが考慮されます。
上記のSQLクエリにWHERE句とROUND関数を追加することで、フィルタを追加して平均値を丸めることもできます。
SELECT a.order_date,a.sale, round(AVG(a.sale) OVER(ORDER BY a.order_date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW),2) AS avg_sales FROM sales a WHERE condition;
ボーナスリード:PostgreSQLの月ごとの成長を計算する
PostgreSQLで30日間の移動平均を計算する方法
同様に、PostgreSQLで30日間の移動平均を計算する場合は、前の29行と現在の行を考慮して、上記のクエリを変更できます。
SELECT a.order_date,a.sale, AVG(a.sale) OVER(ORDER BY a.order_date ROWS BETWEEN 29 PRECEDING AND CURRENT ROW) AS avg_sales FROM sales a ;
PostgreSQLで3か月の移動平均を計算する方法
毎日の売上データがあり、PostgreSQLで3か月の移動平均を計算する場合は、89の前の行と現在の行を考慮して上記のクエリを変更できます。
SELECT a.order_date,a.sale, AVG(a.sale) OVER(ORDER BY a.order_date ROWS BETWEEN 89 PRECEDING AND CURRENT ROW) AS avg_sales FROM sales a ;
日次データではなく月次データがあり、過去3か月の移動平均を計算したいとします
postgres=# create table monthly_sales(order_month date,sale int); postgres=# insert into monthly_sales values('2019-12-01',120), ('2020-01-30',250),('2020-02-28',150),('2020-03-31',300), ('2020-04-30',200),('2020-05-31',200),('2020-06-30',250), ('2020-07-31',150),('2020-08-31',300),('2020-09-30',200); postgres=# select * from monthly_sales; order_month | sale -------------+------ 2019-12-01 | 120 2020-01-30 | 250 2020-02-28 | 150 2020-03-31 | 300 2020-04-30 | 200 2020-05-31 | 200 2020-06-30 | 250 2020-07-31 | 150 2020-08-31 | 300 2020-09-30 | 200
ボーナスリード:SQLで保持率を計算する方法
上記と同じロジックを使用して、PostgreSQLの移動平均を計算します。まず、行を時系列で並べ替えてから、OVERウィンドウ関数を使用して前の2行の平均を計算します。 および現在の行 。
SELECT a.order_month,a.sale, round(AVG(a.sale) OVER(ORDER BY a.order_month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW),2) AS avg_sales FROM monthly_sales a ; order_month | sale | avg_sales -------------+------+----------- 2019-12-01 | 120 | 120.00 2020-01-30 | 250 | 185.00 2020-02-28 | 150 | 173.33 2020-03-31 | 300 | 233.33 2020-04-30 | 200 | 216.67 2020-05-31 | 200 | 233.33 2020-06-30 | 250 | 216.67 2020-07-31 | 150 | 200.00 2020-08-31 | 300 | 233.33 2020-09-30 | 200 | 216.67
ボーナスリード:PostgreSQLでピボットテーブルを作成する方法
上記のSQLクエリにWHERE句を含めることで、フィルタを追加することもできます。
SELECT a.order_month,a.sale, round(AVG(a.sale) OVER(ORDER BY a.order_month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW),2) AS avg_sales FROM monthly_sales a WHERE condition;
上記のクエリをカスタマイズして、要件に応じてPostgreSQLの移動平均を計算できます。
PostgreSQLで移動平均を計算した後、グラフ作成ツールを使用して折れ線グラフにプロットし、チームと共有できます。これは、Ubiqを使用して作成された移動平均を視覚化する折れ線グラフの例です。
PostgreSQLデータベースからチャート、ダッシュボード、レポートを作成したい場合は、Ubiqを試すことができます。 14日間の無料トライアルを提供しています。