PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So berechnen Sie den gleitenden Durchschnitt in PostgreSQL

Mit dem gleitenden Durchschnitt oder dem gleitenden Durchschnitt können Sie den Durchschnitt über einen gleitenden Zeitraum berechnen, z. B. die letzten 7 Tage. Die Berechnung des gleitenden Durchschnitts über die Zeit ergibt einen glatteren Trend im Vergleich zur Verfolgung täglicher Zahlen. Hier ist die SQL-Abfrage zur Berechnung des gleitenden Durchschnitts in PostgreSQL.

Wie man den gleitenden Durchschnitt in PostgreSQL berechnet

So berechnen Sie den gleitenden Durchschnitt in PostgreSQL. Angenommen, Sie haben die folgende Tabelle

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

Bonuslektüre:So importieren Sie eine CSV-Datei in PostgreSQL

Angenommen, Sie möchten den gleitenden Durchschnitt in PostgreSQL für die letzten 5 Tage berechnen. PostgreSQL ermöglicht es Ihnen, den gleitenden Durchschnitt mit Hilfe von Fensterfunktionen zu berechnen. Hier ist die Abfrage zur Berechnung des gleitenden Durchschnitts in PostgreSQL für die letzten 5 Tage. Wir werden uns das im Detail ansehen

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 der obigen Abfrage berechnet die AVG-Funktion den Durchschnittswert des Verkaufs Säule. Wenn wir es mit der Fensterfunktion OVER verwenden, berechnet es den Durchschnitt nur für das von uns definierte Zeitfenster.

Um den gleitenden Durchschnitt in PostgreSQL zu berechnen, sortieren wir die Zeilen zuerst chronologisch mit der ORDER BY-Klausel. Dann definieren wir unser Fenster zur Berechnung des Durchschnitts, indem wir ZEILEN ZWISCHEN 4 VORHERGEHENDER UND AKTUELLER ZEILE verwenden. Das bedeutet, dass für jede Zeile nur der Durchschnitt für die aktuelle Zeile und die vorangegangenen 4 Zeilen berechnet wird. Für jede Zeile werden also nur die Werte der letzten 5 Tage berücksichtigt.

Sie können auch Filter hinzufügen und Durchschnittswerte runden, indem Sie der obigen SQL-Abfrage eine WHERE-Klausel und eine ROUND-Funktion hinzufügen.

 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-Lesetext:Berechnen Sie das Wachstum von Monat zu Monat in PostgreSQL

So berechnen Sie den gleitenden 30-Tage-Durchschnitt in PostgreSQL

Wenn Sie den gleitenden 30-Tage-Durchschnitt in PostgreSQL berechnen möchten, können Sie die obige Abfrage ändern, indem Sie 29 vorangehende Zeilen und die aktuelle Zeile berücksichtigen

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 ;

So berechnen Sie den gleitenden 3-Monats-Durchschnitt in PostgreSQL

Wenn Sie über tägliche Verkaufsdaten verfügen und den gleitenden 3-Monats-Durchschnitt in PostgreSQL berechnen möchten, können Sie die obige Abfrage ändern, indem Sie 89 vorangehende Zeilen und die aktuelle Zeile berücksichtigen

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 ;

Angenommen, Sie haben monatliche Daten anstelle von täglichen Daten und möchten den gleitenden Durchschnitt für die letzten 3 Monate berechnen

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

Bonuslektüre:So berechnen Sie die Aufbewahrungsrate in SQL

Wir verwenden die gleiche Logik wie oben, um den gleitenden Durchschnitt in PostgreSQL zu berechnen. Zuerst sortieren wir die Zeilen chronologisch und verwenden dann die OVER-Fensterfunktion, um den Durchschnitt für die vorhergehenden 2 Zeilen zu berechnen und aktuelle Zeile .

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

Bonuslektüre:So erstellen Sie eine Pivot-Tabelle in PostgreSQL

Sie können auch Filter hinzufügen, indem Sie die WHERE-Klausel in die obige SQL-Abfrage einfügen.

 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;

Sie können die obige Abfrage anpassen, um den gleitenden Durchschnitt in PostgreSQL gemäß Ihren Anforderungen zu berechnen.

Nachdem Sie den gleitenden Durchschnitt in PostgreSQL berechnet haben, können Sie ihn mit einem Diagrammtool in einem Liniendiagramm darstellen und mit Ihrem Team teilen. Hier ist ein Beispiel für ein Liniendiagramm, das den gleitenden Durchschnitt visualisiert und mit Ubiq erstellt wurde.

Wenn Sie Diagramme, Dashboards und Berichte aus der PostgreSQL-Datenbank erstellen möchten, können Sie Ubiq ausprobieren. Wir bieten eine 14-tägige kostenlose Testversion an.