Pivot-Tabellen sind eine nützliche Methode, um große Datenmengen zu analysieren, indem sie in einem besser verwaltbaren Format organisiert werden. So erstellen Sie eine Pivot-Tabelle in PostgreSQL. Mit anderen Worten, wir erstellen eine Kreuztabelle in PostgreSQL.
So erstellen Sie eine Pivot-Tabelle in PostgreSQL
Es gibt mindestens ein paar Möglichkeiten, eine Pivot-Tabelle in PostgreSQL zu erstellen. Zum einen schwenken wir Zeilen in PostgreSQL mithilfe der CASE-Anweisung in Spalten, und ein anderes ist ein einfaches Beispiel für die PostgreSQL-Kreuztabellenfunktion.
Angenommen, Sie haben die folgende Tabelle
CREATE TABLE Meeting ( ID INT, Meeting_id INT, field_key VARCHAR(100), field_value VARCHAR(100) ); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (1, 1,'first_name' , 'Alec'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (2, 1,'last_name' , 'Jones'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (3, 1,'occupation' , 'engineer'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (4,2,'first_name' , 'John'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (5,2,'last_name' , 'Doe'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (6,2,'occupation' , 'engineer'); +------+------------+------------+-------------+ | ID | Meeting_id | field_key | field_value | +------+------------+------------+-------------+ | 1 | 1 | first_name | Alec | | 2 | 1 | last_name | Jones | | 3 | 1 | occupation | engineer | | 4 | 2 | first_name | John | | 5 | 2 | last_name | Doe | | 6 | 2 | occupation | engineer | +------+------------+------------+-------------+
Angenommen, Sie möchten eine Pivot-Tabelle in PostgreSQL erstellen, sodass für jeden eindeutigen Wert in field_key eine neue Spalte erstellt wird Spalte, also (Vorname, Nachname, Beruf) wie unten gezeigt
+------------+-------------+-------------+-------------+ | Meeting_id | first_name | last_name | occupation | +------------+-------------+-------------+-------------+ | 1 | Alec | Jones | engineer | | 2 | John | Doe | engineer | +------------+-------------+-------------+-------------+
Pivot-Tabelle in PostgreSQL mit CASE-Anweisung erstellen
Sie können Zeilen in der obigen Tabelle einfach mit der CASE-Anweisung
in Spalten transponierenpostgresql> select meeting_Id, max(case when (field_key='first_name') then field_value else NULL end) as first_name, max(case when (field_key='last_name') then field_value else NULL end) as last_name, max(case when (field_key='occupation') then field_value else NULL end) as occupation from meeting group by meeting_Id order by meeting_Id; +------------+------------+-----------+------------+ | meeting_Id | first_name | last_name | occupation | +------------+------------+-----------+------------+ | 1 | Alec | Jones | engineer | | 2 | John | Doe | engineer | +------------+------------+-----------+------------+
In der obigen Anweisung der field_key jeder Zeile value überprüft und die Spalten entsprechend gefüllt. Wenn beispielsweise field_key Der Wert ist „Vorname“, dann Vorname Spalte ausgefüllt wird usw.
Sobald Sie eine Pivot-Tabelle in PostgreSQL erstellt haben, können Sie sie mit einem Berichterstellungstool in einer Tabelle darstellen. Hier ist ein Beispiel für eine mit Ubiq erstellte Pivot-Tabelle. Wussten Sie, dass Sie mit Ubiq Pivot-Tabellen erstellen können, ohne SQL schreiben zu müssen?
Bonuslektüre: So berechnen Sie die laufende Summe in Redshift
Erstellen Sie eine Pivot-Tabelle in PostgreSQL mit der Crosstab-Funktion
PostgreSQL bietet auch eine integrierte Crosstab-Funktion, mit der Sie auf einfache Weise eine Pivot-Tabelle in PostgreSQL erstellen können. Allerdings müssen Sie die table_func installieren Erweiterung, um die Kreuztabellenfunktion zu aktivieren.
postgresql> CREATE EXTENSION IF NOT EXISTS tablefunc;
Angenommen, Sie haben die folgende Tabelle.
CREATE TABLE exams ( id int(11) NOT NULL auto_increment, name varchar(15), exam int, score int, PRIMARY KEY (id) ); insert into exams (name,exam,score) values ('Bob',1,70); insert into exams (name,exam,score) values ('Bob',2,77); insert into exams (name,exam,score) values ('Bob',3,71); insert into exams (name,exam,score) values ('Bob',4,70); insert into exams (name,exam,score) values ('Sue',1,89); insert into exams (name,exam,score) values ('Sue',2,87); insert into exams (name,exam,score) values ('Sue',3,88); insert into exams (name,exam,score) values ('Sue',4,89); mysql> select * from exams; +------+------+------+-------+ | id | name | exam | score | +------+------+------+-------+ | 1 | Bob | 1 | 70 | | 2 | Bob | 2 | 77 | | 3 | Bob | 3 | 71 | | 4 | Bob | 4 | 70 | | 5 | Sue | 1 | 89 | | 6 | Sue | 2 | 87 | | 7 | Sue | 3 | 88 | | 8 | Sue | 4 | 89 | +------+------+------+-------+
Angenommen, Sie möchten die obige Tabelle nach Prüfung pivotieren Spalte, sodass Sie für jeden Schüler eine Zeile mit allen Prüfungsergebnissen als separate Spalten erhalten, wie unten gezeigt.
name | exam1 | exam2 | exam3 | exam4 ------+-------+-------+-------+------- Bob | 70 | 77 | 71 | 70 Sue | 89 | 87 | 88 | 89
Da wir die Kreuztabellenfunktion für unsere Datenbank aktiviert haben, können Sie die folgende Abfrage verwenden, um eine Kreuztabelle in PostgreSQL zu erstellen.
postgres=# SELECT * FROM crosstab('select name, exam, score from exams order by 1,2') AS ct (name varchar(15),exam1 int, exam2 int, exam3 int, exam4 int); name | exam1 | exam2 | exam3 | exam4 ------+-------+-------+-------+------- Bob | 70 | 77 | 71 | 70 Sue | 89 | 87 | 88 | 89
Crosstab arbeitet mit einer SELECT-Abfrage als Eingabeparameter, die drei Anforderungen erfüllen muss
- Es müssen 3 Spalten zurückgegeben werden
- Die erste Spalte ist die Zeilenkennung für Ihre endgültige Pivot-Tabelle, z. B. Name
- Die 2. Spalte ist die zu pivotierende Kategoriespalte, z. B. Prüfung
- Die 3. Spalte ist die Wertspalte, die Sie drehen möchten, z. B. die Punktzahl
Die Kreuztabelle nimmt das Ergebnis Ihrer SELECT-Abfrage und erstellt daraus eine Pivot-Tabelle, basierend auf den Spalten, die Sie für Ihre Pivot-Tabelle angeben. In der obigen Abfrage wird die Pivot-Tabelle in einer temporären Tabelle ct(name varchar(15),exam1 int, exam2 int, exam3 int, exam4 int) gespeichert. Sie müssen die Spaltennamen und Datentypen Ihrer endgültigen Pivot-Tabelle definieren.
Bonuslektüre: So berechnen Sie den gleitenden Durchschnitt in Redshift
Wenn Sie eine Pivot-Tabelle in PostgreSQL erstellen möchten, fanden wir unserer Meinung nach die Crosstab-Methode schwieriger als die Verwendung der CASE-Anweisung, hauptsächlich weil Crosstab Fehler auslöst, wenn Sie die Spaltendatentypen der endgültigen Pivot-Tabelle nicht korrekt definieren.
Trotzdem kennen Sie jetzt zwei Möglichkeiten, um Pivot-Tabellen in PostgreSQL zu erstellen. Sie können sie gemäß Ihren Anforderungen anpassen.
Wussten Sie, dass Sie Pivot-Tabellen in Ubiq einfach per Drag &Drop erstellen können?
Übrigens, wenn Sie Pivot-Tabellen, Diagramme und Dashboards aus der PostgreSQL-Datenbank erstellen möchten, können Sie Ubiq ausprobieren. Wir bieten eine 14-tägige kostenlose Testversion an.