sql >> Database >  >> RDS >> PostgreSQL

Hoe voortschrijdend gemiddelde te berekenen in PostgreSQL

Met voortschrijdend gemiddelde of voortschrijdend gemiddelde kunt u het gemiddelde berekenen over een voortschrijdende periode, zoals de afgelopen 7 dagen. Het berekenen van het voortschrijdend gemiddelde in de loop van de tijd geeft een vloeiendere trend in vergelijking met het bijhouden van dagelijkse cijfers. Dit is de SQL-query om het voortschrijdend gemiddelde in PostgreSQL te berekenen.

Hoe het voortschrijdend gemiddelde in PostgreSQL te berekenen

Hier leest u hoe u het voortschrijdend gemiddelde in PostgreSQL kunt berekenen. Stel dat u de volgende tabel heeft

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 Lezen:CSV-bestand importeren in PostgreSQL

Stel dat u het voortschrijdend gemiddelde in PostgreSQL voor de afgelopen 5 dagen wilt berekenen. Met PostgreSQL kunt u het voortschrijdend gemiddelde berekenen met behulp van Window Functions. Dit is de vraag om het voortschrijdend gemiddelde in PostgreSQL voor de afgelopen 5 dagen te berekenen. We zullen het in detail bekijken

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

In de bovenstaande zoekopdracht berekent de AVG-functie de gemiddelde waarde van verkoop kolom. Als we het gebruiken met de vensterfunctie OVER, berekent het alleen het gemiddelde voor het door ons gedefinieerde tijdvenster.

Om het voortschrijdend gemiddelde in PostgreSQL te berekenen, sorteren we de rijen eerst chronologisch met behulp van de ORDER BY-clausule. Vervolgens definiëren we ons venster voor het berekenen van het gemiddelde, met behulp van RIJEN TUSSEN 4 VORIGE EN HUIDIGE RIJ. Het betekent dat voor elke rij het gemiddelde wordt berekend voor alleen de huidige rij en de voorgaande 4 rijen. Dus voor elke rij worden alleen de waarden van de afgelopen 5 dagen in aanmerking genomen.

U kunt ook filters toevoegen en gemiddelde waarden afronden door de WHERE-clausule en ROUND-functie toe te voegen in de bovenstaande SQL-query.

 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 lezen:bereken de groei van maand tot maand in PostgreSQL

Het 30-daags voortschrijdend gemiddelde berekenen in PostgreSQL

Evenzo, als u 30-daags voortschrijdend gemiddelde in PostgreSQL wilt berekenen, kunt u de bovenstaande zoekopdracht wijzigen door rekening te houden met 29 voorgaande rijen en huidige rij

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 ;

Hoe het voortschrijdend gemiddelde van 3 maanden in PostgreSQL te berekenen

Als u dagelijkse verkoopgegevens heeft en het voortschrijdend gemiddelde over 3 maanden in PostgreSQL wilt berekenen, kunt u de bovenstaande zoekopdracht wijzigen door rekening te houden met 89 voorgaande rijen en huidige rij

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 ;

Stel dat u maandelijkse gegevens heeft in plaats van dagelijkse gegevens en het voortschrijdend gemiddelde voor de afgelopen 3 maanden wilt berekenen

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 Lezen:Retentiepercentage berekenen in SQL

We gebruiken dezelfde logica als hierboven om het voortschrijdend gemiddelde in PostgreSQL te berekenen. Eerst sorteren we rijen chronologisch en gebruiken dan de vensterfunctie OVER om het gemiddelde te berekenen voor voorafgaande 2 rijen en huidige rij .

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 lezen:een draaitabel maken in PostgreSQL

U kunt ook filters toevoegen door de WHERE-clausule op te nemen in de bovenstaande SQL-query.

 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;

U kunt de bovenstaande query aanpassen om het voortschrijdend gemiddelde in PostgreSQL te berekenen, volgens uw vereisten.

Nadat u het voortschrijdend gemiddelde in PostgreSQL hebt berekend, kunt u een grafiektool gebruiken om het in een lijndiagram uit te zetten en met uw team te delen. Hier is een voorbeeld van een lijndiagram dat voortschrijdend gemiddelde visualiseert, gemaakt met Ubiq.

Als u grafieken, dashboards en rapporten wilt maken vanuit de PostgreSQL-database, kunt u Ubiq proberen. We bieden een gratis proefperiode van 14 dagen.


  1. pdo voorbereide uitspraken met jokertekens

  2. Het minimaliseren van de impact van het verbreden van een IDENTITEIT-kolom - deel 4

  3. 5 veel voorkomende SQL-query ontwerp fouten te vermijden ten koste van alles

  4. hoe de standby-database te herstellen van een ontbrekend archieflogboek