La media mobile o la media mobile ti consente di calcolare la media su un periodo di tempo mobile, come gli ultimi 7 giorni. Il calcolo della media mobile nel tempo fornisce una tendenza più fluida rispetto al monitoraggio dei numeri giornalieri. Ecco la query SQL per calcolare la media mobile in PostgreSQL.
Come calcolare la media mobile in PostgreSQL
Ecco come calcolare la media mobile in PostgreSQL. Supponiamo che tu abbia la seguente tabella
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
Bonus Lettura:come importare file CSV in PostgreSQL
Diciamo che vuoi calcolare la media mobile in PostgreSQL per gli ultimi 5 giorni. PostgreSQL ti consente di calcolare la media mobile con l'aiuto di Window Functions. Ecco la query per calcolare la media mobile in PostgreSQL negli ultimi 5 giorni. Lo esamineremo in dettaglio
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
Nella query precedente, la funzione AVG calcola il valore medio di vendita colonna. Quando lo utilizziamo con la funzione Finestra OVER, calcola la media solo per la finestra temporale da noi definita.
Per calcolare la media mobile in PostgreSQL, prima ordiniamo le righe cronologicamente usando la clausola ORDER BY. Quindi definiamo la nostra Finestra per il calcolo della media, utilizzando RIGHE TRA 4 PRECEDENTI E CORRENTE. Significa che per ogni riga calcolare la media solo per la riga corrente e precedenti 4 righe. Quindi per ogni riga vengono considerati solo i valori degli ultimi 5 giorni.
Puoi anche aggiungere filtri e arrotondare i valori medi aggiungendo la clausola WHERE e la funzione ROUND nella query SQL precedente.
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;
Lettura bonus:calcola la crescita mese dopo mese in PostgreSQL
Come calcolare la media mobile a 30 giorni in PostgreSQL
Allo stesso modo, se vuoi calcolare la media mobile di 30 giorni in PostgreSQL, puoi modificare la query precedente, considerando 29 righe precedenti e la riga corrente
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 ;
Come calcolare la media mobile di 3 mesi in PostgreSQL
Se disponi di dati sulle vendite giornaliere e desideri calcolare la media mobile di 3 mesi in PostgreSQL, puoi modificare la query precedente, considerando 89 righe precedenti e riga corrente
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 ;
Supponiamo che tu disponga di dati mensili, anziché giornalieri, e desideri calcolare la media mobile degli ultimi 3 mesi
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
Bonus Leggi:Come calcolare il tasso di conservazione in SQL
Usiamo la stessa logica di cui sopra, per calcolare la media mobile in PostgreSQL. Innanzitutto, ordiniamo le righe in ordine cronologico, quindi utilizziamo la funzione della finestra OVER per calcolare la media per 2 righe precedenti e riga corrente .
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
Bonus Lettura:come creare una tabella pivot in PostgreSQL
Puoi anche aggiungere filtri includendo la clausola WHERE nella query SQL precedente.
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;
Puoi personalizzare la query sopra per calcolare la media mobile in PostgreSQL, secondo le tue esigenze.
Dopo aver calcolato la media mobile in PostgreSQL, puoi utilizzare uno strumento di creazione di grafici per tracciarlo su un grafico a linee e condividerlo con il tuo team. Ecco un esempio di grafico a linee che visualizza la media mobile, creato utilizzando Ubiq.
Se vuoi creare grafici, dashboard e report dal database PostgreSQL, puoi provare Ubiq. Offriamo una prova gratuita di 14 giorni.