Database
 sql >> Datenbank >  >> RDS >> Database

So berechnen Sie den gleitenden Durchschnitt in Redshift

Der gleitende Durchschnitt oder der gleitende Durchschnitt ist eine nützliche Metrik, die Ihnen hilft, den Durchschnittswert über einen gleitenden Zeitraum (z. B. den durchschnittlichen Umsatz der letzten 7 Tage) zu verfolgen. Die Berechnung des gleitenden Durchschnitts über die Zeit ergibt einen vernünftigeren Trend im Vergleich zur Darstellung täglicher Zahlen. Da es in Redshift keine eingebaute Funktion zur Berechnung des gleitenden Durchschnitts gibt, hier ist die SQL-Abfrage dafür.

So berechnen Sie den gleitenden Durchschnitt in Rotverschiebung

Hier sind die Schritte zur Berechnung des gleitenden Durchschnitts in Redshift. Nehmen wir an, Sie haben die folgende Tabelle, die tägliche Verkaufsinformationen in Redshift enthält.

# 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 |
+------------+------+

Angenommen, Sie möchten den gleitenden Durchschnitt in Redshift für die letzten 5 Tage berechnen. Redshift (das im Grunde Postgresql ist) macht dies mit Hilfe der Redshift-Fensterfunktionen wirklich einfach. Hier ist die SQL-Abfrage zur Berechnung des gleitenden Durchschnitts der letzten 5 Tage. Wir werden uns das weiter unten 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 ;

Wenn Sie die Ergebnisse runden möchten, können Sie die ROUND-Funktion wie gezeigt verwenden, um den laufenden Durchschnitt in Redshift zu berechnen

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

Schauen wir uns die obige Abfrage im Detail an. Die AVG-Funktion berechnet den Durchschnittswert des Verkaufs Säule. Wenn wir es jedoch zusammen mit der WINDOW-Funktion OVER verwenden, berechnet es den Durchschnittswert nur für das von uns definierte Fenster.

Zuerst verwenden wir ORDER BY für unsere Daten, um sicherzustellen, dass die Zeilen chronologisch sortiert sind. Dann definieren wir unser Fenster für den Durchschnitt mit der OVER-Funktion und erwähnen ROWS BETWEEN 4 PRECEDING AND CURRENT ROW. Das heißt, berechnen Sie für jede Zeile den Durchschnitt für die vorangegangenen 4 Zeilen und die aktuelle Zeile. Da sich der Fensterrahmen für jede Zeile ändert, werden nur die vorangegangenen 4 Tage und das aktuelle Datum verwendet.

Sie können auch Filter hinzufügen, indem Sie der obigen SQL-Abfrage eine WHERE-Klausel 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;

Wenn Sie den gleitenden Durchschnitt in Redshift für die letzten 30 Tage/1 Monat berechnen möchten, ändern Sie die obige Abfrage so, dass sie PRECEDING 29 ROWS AND CURRENT ROW verwendet

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;

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

So berechnen Sie den gleitenden Durchschnitt in Rotverschiebung für die letzten 3 Monate

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

# 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

In diesem Fall verwenden wir die gleiche Logik, um den gleitenden Durchschnitt in Redshift zu berechnen. Erster ORDER BY order_month Spalte, um sicherzustellen, dass die Zeilen chronologisch sortiert sind. Berechnen Sie dann den Durchschnitt für VORHERIGE 2 REIHEN UND AKTUELLE REIHE

 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

Bonuslektüre: So berechnen Sie die laufende Summe in Redshift

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 Redshift nach Ihren Anforderungen zu berechnen.

Nachdem Sie den gleitenden Durchschnitt in Redshift 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 Redshift-Datenbank erstellen möchten, können Sie Ubiq ausprobieren. Wir bieten eine 14-tägige kostenlose Testversion an.