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

Sådan beregnes glidende gennemsnit i PostgreSQL

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.


  1. Postgres Venstre Sammenføj med hvor tilstand

  2. Oracle PL/SQL:hvordan får man staksporet, pakkenavnet og procedurenavnet

  3. Uventet Clustered Index Fragmentation

  4. Sådan kopieres SQL Server-databaser fra en instans til en anden