Glidende gennemsnit eller rullende gennemsnit giver dig mulighed for at beregne gennemsnit over en glidende periode, f.eks. de seneste 7 dage. Beregning af glidende gennemsnit over tid giver en jævnere tendens sammenlignet med sporing af daglige tal. Her er SQL-forespørgslen til at beregne glidende gennemsnit i PostgreSQL.
Sådan beregnes glidende gennemsnit i PostgreSQL
Sådan beregnes glidende gennemsnit i PostgreSQL. Lad os sige, at du har følgende tabel
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:Sådan importeres CSV-fil i PostgreSQL
Lad os sige, at du vil beregne glidende gennemsnit i PostgreSQL for de sidste 5 dage. PostgreSQL giver dig mulighed for at beregne rullende gennemsnit ved hjælp af vinduesfunktioner. Her er forespørgslen til at beregne glidende gennemsnit i PostgreSQL for de seneste 5 dage. Vi vil se nærmere på det
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 ovenstående forespørgsel beregner AVG-funktionen gennemsnitsværdien af salg kolonne. Når vi bruger det med Window-funktionen OVER, beregner det kun gennemsnit for det tidsvindue, som er defineret af os.
For at beregne glidende gennemsnit i PostgreSQL sorterer vi først rækkerne kronologisk ved hjælp af ORDER BY-klausulen. Derefter definerer vi vores vindue til beregning af gennemsnit ved at bruge RÆKKER MELLEM 4 FOREGÅENDE OG AKTUELLE RÆKKER. Det betyder, at for hver række kun beregnes gennemsnittet for den aktuelle række og de foregående 4 rækker. Så for hver række tages kun de seneste 5 dages værdier i betragtning.
Du kan også tilføje filtre og runde gennemsnitsværdier ved at tilføje WHERE-sætning og ROUND-funktion i ovenstående SQL-forespørgsel.
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:Beregn måned over måned vækst i PostgreSQL
Sådan beregnes 30-dages glidende gennemsnit i PostgreSQL
Tilsvarende, hvis du ønsker at beregne 30-dages glidende gennemsnit i PostgreSQL, kan du ændre ovenstående forespørgsel ved at overveje 29 foregående rækker og nuværende række
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 ;
Sådan beregnes 3-måneders glidende gennemsnit i PostgreSQL
Hvis du har daglige salgsdata og ønsker at beregne 3-måneders glidende gennemsnit i PostgreSQL, kan du ændre ovenstående forespørgsel ved at overveje 89 foregående rækker og nuværende række
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 ;
Lad os sige, at du har månedlige data i stedet for daglige data og ønsker at beregne rullende gennemsnit for de seneste 3 måneder
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æser:Sådan beregnes retentionsrate i SQL
Vi bruger samme logik som ovenfor, til at beregne rullende gennemsnit i PostgreSQL. Først sorterer vi rækker kronologisk og bruger derefter OVER-vinduefunktionen til at beregne gennemsnit for foregående 2 rækker og den aktuelle række .
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:Sådan opretter du pivottabel i PostgreSQL
Du kan også tilføje filtre ved at inkludere WHERE-sætning i ovenstående SQL-forespørgsel.
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 tilpasse ovenstående forespørgsel til at beregne glidende gennemsnit i PostgreSQL i henhold til dine krav.
Når du har beregnet glidende gennemsnit i PostgreSQL, kan du bruge et diagramværktøj til at plotte det på et linjediagram og dele det med dit team. Her er et eksempel på et linjediagram, der visualiserer glidende gennemsnit, oprettet ved hjælp af Ubiq.
Hvis du vil oprette diagrammer, dashboards og rapporter fra PostgreSQL-databasen, kan du prøve Ubiq. Vi tilbyder en 14-dages gratis prøveperiode.