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

So füllen Sie fehlende Daten in PostgreSQL mit generate_series aus

Oft müssen wir fehlende Daten in PostgreSQL füllen, indem wir fehlende Zeilen für diese Datumswerte füllen. So füllen Sie fehlende Daten in PostgreSQL mit der Funktion generate_series aus.

Wie man fehlende Daten in PostgreSQL mit generate_series füllt

Hier sind die Schritte zum Ausfüllen fehlender Daten in PostgreSQL. Wir werden generate_series in PostgreSQL verwenden, um fehlende Werte zu füllen.

Nehmen wir an, Sie haben die folgende Tabelle sales(order_date,sale)

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

postgresql=# insert into sales(order_date,sale) values('2020-04-01',212),
     ('2020-04-04',220),
     ('2020-04-05',120),
     ('2020-04-07',200),
     ('2020-04-08',222),
     ('2020-04-10',312),
     ('2020-04-11',225),
     ('2020-04-12',212);

postgresql=# select * from sales;
+------------+------+
| order_date | sale |
+------------+------+
| 2020-04-01 |  212 |
| 2020-04-04 |  220 |
| 2020-04-05 |  120 |
| 2020-04-07 |  200 |
| 2020-04-08 |  222 |
| 2020-04-10 |  312 |
| 2020-04-11 |  225 |
| 2020-04-12 |  212 |
+------------+------+

Bonus-Lesetext:So berechnen Sie den Median in PostgreSQL

Wie Sie in der obigen Tabelle sehen können, fehlen darin Datumswerte wie 2., 3. April usw.

Wenn wir versuchen, diese Daten in einem Diagramm darzustellen, sieht es in etwa so aus

Ein solches Diagramm kann irreführend sein, da es keine Spaltenlücken für fehlende Daten anzeigt.

Bonuslektüre:So berechnen Sie den gleitenden Durchschnitt in PostgreSQL

Um fehlende Daten in PostgreSQL zu füllen, müssen wir eine „Hilfs“-Datumsreihentabelle erstellen, die alle Daten zwischen Mindest- und Höchstdaten in unserer Tabelle enthält, einschließlich fehlender Datumswerte als Zeilen. Wir werden mit unseren Verkäufen an diesem Helfertisch teilnehmen Tabelle.

Wir werden generate_series in PostgreSQL verwenden, um eine Datumsreihentabelle zu generieren. generate_series Die Funktion generiert automatisch eine fortlaufende Reihe von Zahlen und Daten, wenn Sie die Mindest- und Höchstwerte für Ihre Reihe angeben.

Hier ist ein Beispiel, in dem wir generate_series anweisen, eine Datumsreihe zwischen minimalen und maximalen Datumsangaben in unserer Tabelle zu generieren, einschließlich fehlender Datumswerte als Zeilen.

postgres=# SELECT generate_series(min(order_date), max(order_date), '1d')::date AS order_date
           FROM   sales;

 order_date
------------
 2020-04-01
 2020-04-02
 2020-04-03
 2020-04-04
 2020-04-05
 2020-04-06
 2020-04-07
 2020-04-08
 2020-04-09
 2020-04-10
 2020-04-11
 2020-04-12

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

Als Nächstes führen wir einen LEFT Join der Hilfstabelle mit Verkäufen durch um fehlende Daten in PostgreSQL zu füllen.

postgres=# SELECT x.order_date, t.sale
           FROM (
              SELECT generate_series(min(order_date), max(order_date), '1d')::date AS order_date
              FROM   sales
               ) x
           LEFT   JOIN sales t USING (order_date)
           ORDER  BY x.order_date;

 order_date | sale
------------+------
 2020-04-01 |  212
 2020-04-02 |
 2020-04-03 |
 2020-04-04 |  220
 2020-04-05 |  120
 2020-04-06 |
 2020-04-07 |  200
 2020-04-08 |  222
 2020-04-09 |
 2020-04-10 |  312
 2020-04-11 |  225
 2020-04-12 |  212

Nachdem Sie fehlende Daten in PostgreSQL ausgefüllt haben, können Sie diese Daten mit einem Berichterstellungstool in einem Balkendiagramm oder Dashboard darstellen und mit Ihrem Team teilen. Hier ist ein Beispiel für ein Balkendiagramm, das die täglichen Verkäufe zeigt und mit Ubiq erstellt wurde.

Sehen Sie den Unterschied in 2 Diagrammen!

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.