sql >> Database >  >> RDS >> PostgreSQL

Een draaitabel maken in PostgreSQL

Draaitabel is een handige manier om grote hoeveelheden gegevens te analyseren door deze in een beter beheersbaar formaat te ordenen. Hier leest u hoe u een draaitabel maakt in PostgreSQL. Met andere woorden, we zullen een kruistabel maken in PostgreSQL.

Hoe maak je een draaitabel in PostgreSQL

Er zijn op zijn minst een aantal manieren om een ​​draaitabel te maken in PostgreSQL. Een daarvan is waar we rijen naar kolommen in PostgreSQL draaien met behulp van de CASE-instructie, en een andere is een eenvoudig voorbeeld van de PostgreSQL-kruistabelfunctie.

Stel dat u de volgende tabel heeft

TABEL MAKEN 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 | voornaam | Alec || 2 | 1 | achternaam | Jones || 3 | 1 | beroep | ingenieur || 4 | 2 | voornaam | Jan || 5 | 2 | achternaam | Doe || 6 | 2 | beroep | ingenieur |+------+------------+------------+-------------+ 

Stel dat u een draaitabel in PostgreSQL wilt maken, zodat er een nieuwe kolom wordt gemaakt voor elke unieke waarde in field_key kolom, dat wil zeggen (voornaam, achternaam, beroep) zoals hieronder weergegeven

+------------+-------------+-------------+----- --------+| Meeting_id | voornaam | achternaam | bezetting |+------------+-------------+-------------+------ -------+| 1 | Alec | Jones | ingenieur || 2 | Johannes | Doe | ingenieur |+------------+-------------+-------------+------ -------+

Maak draaitabel in PostgreSQL met behulp van CASE-instructie

U kunt eenvoudig rijen in kolommen in de bovenstaande tabel transponeren met behulp van de CASE-instructie,

postgresql> selecteer meeting_Id, max(case when (field_key='first_name') then field_value else NULL end) als first_name, max(case when (field_key='last_name') then field_value else NULL end) als achternaam, max( case when (field_key='occupation') then field_value else NULL end) als bezetting van meeting group by meeting_Id order by meeting_Id;+------------+---------- --+-----------+------------+| meeting_Id | voornaam | achternaam | bezetting |+------------+------------+-----------+--------- ---+| 1 | Alec | Jones | ingenieur || 2 | Johannes | Doe | ingenieur |+------------+------------+-----------+--------- ---+

In de bovenstaande verklaring is de field_key . van elke rij waarde wordt gecontroleerd en dienovereenkomstig worden de kolommen gevuld. Als bijvoorbeeld field_key waarde is 'first_name' dan first_name kolom is gevuld, enzovoort.

Nadat u een draaitabel in PostgreSQL hebt gemaakt, kunt u een rapportagetool gebruiken om deze in een tabel te plotten. Hier is een voorbeeld van een draaitabel gemaakt met Ubiq. Wist je dat je met Ubiq draaitabellen kunt maken zonder SQL te schrijven?

Lees bonus: Hoe bereken je het lopende totaal in Redshift

Maak draaitabel in PostgreSQL met behulp van de kruistabelfunctie

PostgreSQL biedt ook een ingebouwde kruistabelfunctie waarmee u eenvoudig een draaitabel in PostgreSQL kunt maken. U moet echter de table_func . installeren extensie om de kruistabelfunctie in te schakelen.

postgresql> MAAK UITBREIDING ALS NIET BESTAAT tablefunc;

Stel dat u de volgende tabel heeft.

CREATE TABLE examens (id int(11) NOT NULL auto_increment,name varchar(15),exam int,score int,PRIMARY KEY (id));insert in examens (name,exam,score) waarden ('Bob' ,1,70);invoegen in examens (naam,examen,score) waarden ('Bob',2,77);invoegen in examens (naam,examen,score) waarden ('Bob',3,71);invoegen in examens (naam,examen,score) waarden ('Bob',4,70);invoegen in examens (naam,examen,score) waarden ('Sue',1,89);invoegen in examens (naam,examen,score) waarden ('Sue',2,87);invoegen in examens (naam,examen,score) waarden ('Sue',3,88);invoegen in examens (naam,examen,score) waarden ('Sue',4, 89);mysql> selecteer * van examens;+------+------+------+-------+| id | naam | examen | 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 |+------+------+------+-------+

Stel dat u de bovenstaande tabel wilt draaien met Examen kolom, zodat je voor elke student 1 rij krijgt, met alle examenscores als aparte kolommen, zoals hieronder weergegeven.

naam | examen1 | examen2 | examen3 | examen4------+-------+-------+-------+------- Bob | 70 | 77 | 71 | 70 Sue | 89 | 87 | 88 | 89

Omdat we de kruistabelfunctie voor onze database hebben ingeschakeld, kunt u de volgende query gebruiken om een ​​kruistabel te maken in 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); naam | examen1 | examen2 | examen3 | examen4------+-------+-------+-------+------- Bob | 70 | 77 | 71 | 70 Sue | 89 | 87 | 88 | 89

Crosstab werkt met een SELECT-query als invoerparameter die aan 3 vereisten moet voldoen

  • Het moet 3 kolommen retourneren
  • De eerste kolom is de rij-ID voor uw laatste draaitabel, bijvoorbeeld naam
  • De 2e kolom is de categoriekolom die moet worden gedraaid, bijvoorbeeld examen
  • De 3e kolom is de waardekolom die u wilt draaien, bijvoorbeeld score

De kruistabel neemt het resultaat van uw SELECT-query en maakt er draaitabel van, op basis van de kolommen die u voor uw draaitabel noemt. In de bovenstaande query is de draaitabel opgeslagen in een tijdelijke tabel ct(name varchar(15),exam1 int, exam2 int, exam3 int, exam4 int). U moet de kolomnamen en gegevenstypen van uw uiteindelijke draaitabel definiëren.

Lees bonus: Hoe het voortschrijdend gemiddelde in roodverschuiving te berekenen

Naar onze mening, als u een draaitabel in PostgreSQL wilt maken, vonden we de Crosstab-methode moeilijker dan het gebruik van de CASE-instructie, voornamelijk omdat Crosstab fouten genereert als u de kolomgegevenstypen van de uiteindelijke draaitabel niet correct definieert.

Desalniettemin kent u nu twee manieren om een ​​draaitabel in PostgreSQL te maken. U kunt ze naar wens aanpassen.

Wist je dat je draaitabellen in Ubiq kunt maken door gewoon te slepen en neer te zetten?

Trouwens, als je draaitabellen, grafieken en dashboards van de PostgreSQL-database wilt maken, kun je Ubiq proberen. We bieden een gratis proefperiode van 14 dagen aan.

  1. Hoe plaats ik een tijdstempel in Oracle?

  2. Getallen opmaken met komma's in PostgreSQL

  3. Oproep naar ongedefinieerde functie oci_connect, php_oci8_12c.dll, windows 8.1, php5.6.6

  4. Oracle PLSQL-interviewvragen