PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come calcolare la media mobile in PostgreSQL

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.