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

Sådan beregnes glidende gennemsnit i rødforskydning

Rullende gennemsnit eller glidende gennemsnit er en nyttig metrik, der hjælper dig med at holde styr på gennemsnitsværdien over en glidende periode (f.eks. gennemsnitligt salg for de seneste 7 dage). Beregning af glidende gennemsnit over tid giver en mere fornuftig tendens sammenlignet med at plotte daglige tal. Da der ikke er nogen indbygget funktion til at beregne glidende gennemsnit i Redshift, er her SQL-forespørgslen til at gøre det.

Sådan beregnes glidende gennemsnit i rødforskydning

Her er trinene til at beregne glidende gennemsnit i rødforskydning. Lad os sige, at du har følgende tabel, der indeholder daglige salgsoplysninger i Redshift.

# create table sales(order_date date,sale int);

# insert into sales values('2020-01-01',20),
('2020-01-02',25),('2020-01-03',15),('2020-01-04',30),
('2020-01-05',20),('2020-01-10',20),('2020-01-06',25),
('2020-01-07',15),('2020-01-08',30),('2020-01-09',20);

# select * from sales;
+------------+------+
| order_date | sale |
+------------+------+
| 2020-01-01 |   20 |
| 2020-01-02 |   25 |
| 2020-01-03 |   15 |
| 2020-01-04 |   30 |
| 2020-01-05 |   20 |
| 2020-01-10 |   20 |
| 2020-01-06 |   25 |
| 2020-01-07 |   15 |
| 2020-01-08 |   30 |
| 2020-01-09 |   20 |
+------------+------+

Lad os sige, at du vil beregne glidende gennemsnit i rødforskydning for de seneste 5 dage. Redshift (som dybest set er Postgresql) gør dette virkelig nemt ved hjælp af Redshift Window Functions. Her er SQL-forespørgslen til at beregne glidende gennemsnit for de seneste 5 dage. Vi vil se nærmere på det nedenfor.

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 ;

Hvis du vil runde resultaterne, kan du bruge RUND-funktionen som vist til at beregne løbende gennemsnit i rødforskydning

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;

 order_date | sale | avg_sales
------------+------+---------------
 2020-01-01 |   20 |         20.00
 2020-01-02 |   25 |         22.50
 2020-01-03 |   15 |         20.00
 2020-01-04 |   30 |         22.50
 2020-01-05 |   20 |         22.00
 2020-01-06 |   25 |         23.00
 2020-01-07 |   15 |         21.00
 2020-01-08 |   30 |         24.00
 2020-01-09 |   20 |         22.00
 2020-01-10 |   20 |         22.00

Lad os se på ovenstående forespørgsel i detaljer. AVG-funktionen beregner gennemsnitsværdien af ​​salg kolonne. Men når vi bruger det sammen med WINDOW-funktionen OVER, beregner det kun gennemsnitsværdien for det vindue, vi definerer.

Først bruger vi ORDER BY på vores data for at sikre, at rækker sorteres kronologisk. Derefter definerer vi vores vindue for gennemsnit ved hjælp af OVER-funktionen, og nævner RÆKKER MELLEM 4 FOREGÅENDE OG AKTUELLE RÆKKE. Det vil sige, for hver række beregnes gennemsnittet for de foregående 4 rækker og den aktuelle række. Da vinduesrammen ændres for hver række, vil kun de foregående 4 dage og den aktuelle dato blive brugt.

Du kan også tilføje filtre ved at tilføje WHERE-sætning 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;

Hvis du vil beregne glidende gennemsnit i rødforskydning for de seneste 30 dage/1 måned, skal du ændre ovenstående forespørgsel til at bruge FORUDSTEDENDE 29 RÆKKER OG NUVÆRENDE RÆKKER

SELECT a.order_date,a.sale, 
       round(AVG(a.sale)
            OVER(ORDER BY a.order_date ROWS BETWEEN 29 PRECEDING AND CURRENT ROW),2) AS avg_sales
FROM sales a;

Bonuslæser: Sådan opretter du pivottabel i PostgreSQL

Sådan beregnes glidende gennemsnit i rødforskydning for de seneste 3 måneder

Lad os sige, at du har månedlige salgsdata i stedet for daglige data og ønsker at beregne rullende gennemsnit for de seneste 3 måneder.

# create table monthly_sales(order_month date,sale int);

postgres=# insert into monthly_sales values('2019-12-01',20),
           ('2020-01-30',25),('2020-02-28',15),('2020-03-31',30),
           ('2020-04-30',20),('2020-05-31',20),('2020-06-30',25),
           ('2020-07-31',15),('2020-08-31',30),('2020-09-30',20);

postgres=# select * from monthly_sales;
 order_month | sale
-------------+------
 2019-12-01  |   20
 2020-01-30  |   25
 2020-02-28  |   15
 2020-03-31  |   30
 2020-04-30  |   20
 2020-05-31  |   20
 2020-06-30  |   25
 2020-07-31  |   15
 2020-08-31  |   30
 2020-09-30  |   20

Vi bruger den samme logik til at beregne glidende gennemsnit i Redshift, i dette tilfælde. Første BESTILLING AF ordre_month kolonne for at sikre, at rækkerne er kronologisk sorteret. Beregn derefter gennemsnit for FORUDSTEDENDE 2 RÆKKER OG NUVÆRENDE 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  |   20 |     20.00
 2020-01-30  |   25 |     22.50
 2020-02-28  |   15 |     20.00
 2020-03-31  |   30 |     23.33
 2020-04-30  |   20 |     21.67
 2020-05-31  |   20 |     23.33
 2020-06-30  |   25 |     21.67
 2020-07-31  |   15 |     20.00
 2020-08-31  |   30 |     23.33
 2020-09-30  |   20 |     21.67

Bonuslæser: Sådan beregner du løbende total i rødforskydning

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 rødforskydning i henhold til dine krav.

Når du har beregnet glidende gennemsnit i Redshift, 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 Redshift-databasen, kan du prøve Ubiq. Vi tilbyder en 14-dages gratis prøveperiode.

  1. Android-rum + vinduesfunktioner

  2. Postgres-fejl ved indsættelse - FEJL:ugyldig bytesekvens til kodning af UTF8:0x00

  3. Lær, hvordan du tuner ydeevnen til Microsoft SQL Server

  4. tilpasse pager i psql