Pivottabell är ett användbart sätt att analysera stora mängder data genom att organisera dem i ett mer hanterbart format. Så här skapar du en pivottabell i PostgreSQL. Med andra ord kommer vi att skapa korstabeller i PostgreSQL.
Hur man skapar en pivottabell i PostgreSQL
Det finns åtminstone ett par sätt att skapa pivottabeller i PostgreSQL. En är där vi pivoterar rader till kolumner i PostgreSQL med CASE-satsen, och en annan är ett enkelt exempel på PostgreSQL-korstabellfunktion.
Låt oss säga att du har följande tabell
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 |
+------+------------+------------+-------------+
Låt oss säga att du vill skapa pivottabell i PostgreSQL, så att en ny kolumn skapas för varje unikt värde i field_key kolumn, det vill säga (förnamn, efternamn, yrke) som visas nedan
+------------+-------------+-------------+-------------+ | Meeting_id | first_name | last_name | occupation | +------------+-------------+-------------+-------------+ | 1 | Alec | Jones | engineer | | 2 | John | Doe | engineer | +------------+-------------+-------------+-------------+
Skapa pivottabell i PostgreSQL med CASE-satsen
Du kan enkelt överföra rader till kolumner i tabellen ovan med CASE-satsen,
postgresql> 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 |
+------------+------------+-----------+------------+
I uttalandet ovan, varje rads fältnyckel värdet kontrolleras och därför fylls kolumnerna i. Till exempel om fältnyckel värdet är 'first_name' sedan first_name kolumnen är ifylld och så vidare.
När du väl har skapat en pivottabell i PostgreSQL kan du använda ett rapportverktyg för att plotta den i en tabell. Här är ett exempel på en pivottabell skapad med Ubiq. Visste du att Ubiq låter dig skapa pivottabeller utan att skriva någon SQL?

Bonus läs: Hur man beräknar löpande totalsumma i rödförskjutning
Skapa pivottabell i PostgreSQL med hjälp av Crosstab-funktionen
PostgreSQL har också en inbyggd Crosstab-funktion som gör att du enkelt kan skapa pivottabeller i PostgreSQL. Du måste dock installera table_func tillägg för att aktivera korstabellfunktionen.
postgresql> CREATE EXTENSION IF NOT EXISTS tablefunc;
Låt oss säga att du har följande tabell.
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 |
+------+------+------+-------+
Låt oss säga att du vill pivotera tabellen ovan genom Exam kolumn, så att du för varje elev får 1 rad, med alla provresultat som separata kolumner, som visas nedan.
name | exam1 | exam2 | exam3 | exam4 ------+-------+-------+-------+------- Bob | 70 | 77 | 71 | 70 Sue | 89 | 87 | 88 | 89
Eftersom vi har aktiverat Crosstab-funktionen för vår databas kan du använda följande fråga för att skapa en korstabell i PostgreSQL.
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 fungerar med en SELECT-fråga som indataparameter som måste följa tre krav
- Den måste returnera tre kolumner
- Den första kolumnen är radidentifieraren för din sista pivottabell, t.ex. namn
- Den andra kolumnen är kategorikolumnen som ska pivoteras, t.ex. examen
- Den tredje kolumnen är värdekolumnen som du vill pivotera, t.ex. poäng
Korstabellen tar resultatet av din SELECT-fråga och bygger en pivottabell av den, baserat på kolumnerna du nämner för din pivottabell. I ovanstående fråga lagras pivottabellen i en temporär tabell ct(namn varchar(15),exam1 int, exam2 int, exam3 int, exam4 int). Du måste definiera kolumnnamn och datatyper för din slutliga pivottabell.
Bonus läsning: Hur man beräknar glidande medelvärde i rödförskjutning
Enligt vår åsikt, om du vill skapa pivottabeller i PostgreSQL, fann vi att Crosstab-metoden var svårare än att använda CASE-satsen, främst för att Crosstab kastar fel om du inte definierar kolumndatatyper för den slutliga pivottabellen korrekt.
Ändå vet du nu två sätt att skapa pivottabeller i PostgreSQL. Du kan anpassa dem enligt dina önskemål.
Visste du att du kan skapa pivottabeller i Ubiq genom att bara dra och släppa?
Förresten, om du vill skapa pivottabeller, diagram och instrumentpaneler från PostgreSQL-databasen kan du prova Ubiq. Vi erbjuder en 14-dagars gratis provperiod.