Med glidande medelvärde eller rullande medelvärde kan du beräkna medelvärde över en rörlig tidsperiod, som de senaste 7 dagarna. Att beräkna glidande medelvärde över tid ger en jämnare trend, jämfört med att spåra dagliga siffror. Här är SQL-frågan för att beräkna glidande medelvärde i PostgreSQL.
Hur man beräknar glidande medelvärde i PostgreSQL
Så här beräknar du glidande medelvärde i PostgreSQL. Låt oss säga att du har följande tabell
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 Läs:Hur man importerar CSV-fil i PostgreSQL
Låt oss säga att du vill beräkna glidande medelvärde i PostgreSQL för de senaste 5 dagarna. PostgreSQL låter dig beräkna rullande medelvärde med hjälp av fönsterfunktioner. Här är frågan för att beräkna glidande medelvärde i PostgreSQL för de senaste 5 dagarna. Vi kommer att titta på det i detalj
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
I ovanstående fråga beräknar AVG-funktionen genomsnittsvärdet för försäljning kolumn. När vi använder den med Window-funktionen OVER, beräknar den endast medelvärdet för det tidsfönster som definierats av oss.
För att beräkna glidande medelvärde i PostgreSQL sorterar vi först raderna kronologiskt med hjälp av ORDER BY-satsen. Sedan definierar vi vårt fönster för beräkning av medelvärde, med hjälp av RADER MELLAN 4 FÖREGÅENDE OCH AKTUELLA RADER. Det betyder att för varje rad beräkna genomsnittet för endast den aktuella raden och föregående 4 rader. Så för varje rad beaktas endast de senaste 5 dagarnas värden.
Du kan också lägga till filter och avrundade medelvärden genom att lägga till WHERE-sats och ROUND-funktion i SQL-frågan ovan.
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;
Bonus Läs:Beräkna månad över månad tillväxt i PostgreSQL
Hur man beräknar 30-dagars glidande medelvärde i PostgreSQL
På liknande sätt, om du vill beräkna 30-dagars glidande medelvärde i PostgreSQL, kan du ändra ovanstående fråga genom att överväga 29 föregående rader och nuvarande rad
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 ;
Hur man beräknar 3-månaders glidande medelvärde i PostgreSQL
Om du har dagliga försäljningsdata och vill beräkna 3-månaders glidande medelvärde i PostgreSQL, kan du ändra ovanstående fråga genom att överväga 89 föregående rader och nuvarande rad
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 ;
Låt oss säga att du har månadsdata istället för dagliga data och vill beräkna rullande medelvärde för de senaste tre månaderna
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
Bonusläs:Hur man beräknar retentionsgrad i SQL
Vi använder samma logik som ovan, för att beräkna rullande medelvärde i PostgreSQL. Först sorterar vi rader kronologiskt och använder sedan funktionen OVER-fönster för att beräkna genomsnittet för föregående 2 rader och aktuell rad .
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 Läs:Hur man skapar pivottabell i PostgreSQL
Du kan också lägga till filter genom att inkludera WHERE-satsen i SQL-frågan ovan.
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;
Du kan anpassa frågan ovan för att beräkna glidande medelvärde i PostgreSQL, enligt dina krav.
När du har beräknat glidande medelvärde i PostgreSQL kan du använda ett diagramverktyg för att plotta det på ett linjediagram och dela det med ditt team. Här är ett exempel på ett linjediagram som visualiserar glidande medelvärde, skapat med Ubiq.
Om du vill skapa diagram, instrumentpaneler och rapporter från PostgreSQL-databasen kan du prova Ubiq. Vi erbjuder en 14-dagars gratis provperiod.