PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara Membuat Tabel Pivot di PostgreSQL

Tabel pivot adalah cara yang berguna untuk menganalisis data dalam jumlah besar dengan mengaturnya ke dalam format yang lebih mudah dikelola. Berikut cara membuat tabel pivot di PostgreSQL. Dengan kata lain, kita akan membuat tab silang di PostgreSQL.

Cara Membuat Tabel Pivot di PostgreSQL

Setidaknya ada beberapa cara untuk membuat tabel pivot di PostgreSQL. Salah satunya adalah saat kita memutar baris ke kolom di PostgreSQL menggunakan pernyataan CASE, dan yang lainnya adalah contoh sederhana dari fungsi tab silang PostgreSQL.

Katakanlah Anda memiliki tabel berikut

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

Katakanlah Anda ingin membuat tabel pivot di PostgreSQL, sehingga kolom baru dibuat untuk setiap nilai unik di field_key kolom, yaitu (nama_depan, nama_belakang, pekerjaan) seperti yang ditunjukkan di bawah ini

+------------+-------------+-------------+-------------+
| Meeting_id | first_name  |  last_name  |  occupation |
+------------+-------------+-------------+-------------+
|          1 |       Alec  | Jones       | engineer    |
|          2 |       John  | Doe         | engineer    |
+------------+-------------+-------------+-------------+

Buat Tabel Pivot di PostgreSQL menggunakan pernyataan CASE

Anda dapat dengan mudah mengubah urutan baris menjadi kolom pada tabel di atas menggunakan pernyataan CASE,

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

Dalam pernyataan di atas, setiap baris field_key nilai diperiksa dan dengan demikian kolom diisi. Misalnya, jika kunci_bidang nilainya adalah 'first_name' lalu first_name kolom diisi, dan seterusnya.

Setelah Anda membuat tabel pivot di PostgreSQL, Anda dapat menggunakan alat pelaporan untuk memplotnya dalam sebuah tabel. Berikut adalah contoh tabel pivot yang dibuat menggunakan Ubiq. Tahukah Anda bahwa Ubiq memungkinkan Anda membuat tabel pivot tanpa menulis SQL apa pun?

Bonus baca: Cara Menghitung Total Lari di Redshift

Membuat Tabel Pivot di PostgreSQL menggunakan fungsi Crosstab

PostgreSQL juga menyediakan fungsi Crosstab bawaan yang memungkinkan Anda membuat tabel pivot dengan mudah di PostgreSQL. Namun, Anda perlu menginstal table_func ekstensi untuk mengaktifkan fungsi Tab Silang.

postgresql> CREATE EXTENSION IF NOT EXISTS tablefunc;

Katakanlah Anda memiliki tabel berikut.

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

Katakanlah Anda ingin memutar tabel di atas dengan Ujian kolom, sehingga untuk setiap siswa Anda mendapatkan 1 baris, dengan semua nilai ujian sebagai kolom terpisah, seperti yang ditunjukkan di bawah ini.

 name | exam1 | exam2 | exam3 | exam4
------+-------+-------+-------+-------
 Bob  |    70 |    77 |    71 |    70
 Sue  |    89 |    87 |    88 |    89

Karena kami telah mengaktifkan fungsi Tab Silang untuk database kami, Anda dapat menggunakan kueri berikut untuk membuat tab silang di 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

Tab silang bekerja dengan kueri SELECT sebagai parameter inputnya yang harus mengikuti 3 persyaratan

  • Ini harus mengembalikan 3 kolom
  • Kolom pertama adalah pengidentifikasi baris untuk tabel pivot akhir Anda, misalnya nama
  • Kolom ke-2 adalah kolom kategori yang akan diputar misalnya ujian
  • Kolom ke-3 adalah kolom nilai yang ingin Anda putar misalnya skor

Tab Silang akan mengambil hasil kueri SELECT Anda, dan membuat tabel pivot darinya, berdasarkan kolom yang Anda sebutkan untuk tabel pivot Anda. Dalam kueri di atas, tabel pivot disimpan dalam tabel sementara ct(name varchar(15),exam1, int exam2, exam3 int, exam4 int). Anda harus menentukan nama kolom dan tipe data tabel pivot akhir Anda.

Bonus baca: Cara Menghitung Moving Average di Redshift

Menurut pendapat kami, jika Anda ingin membuat tabel pivot di PostgreSQL, kami menemukan metode Crosstab lebih sulit daripada menggunakan pernyataan CASE, terutama karena Crosstab melempar kesalahan jika Anda tidak mendefinisikan tipe data kolom tabel pivot akhir dengan benar.

Namun demikian, sekarang Anda tahu dua cara untuk membuat tabel pivot di PostgreSQL. Anda dapat menyesuaikannya sesuai kebutuhan Anda.

Tahukah Anda bahwa Anda dapat membuat tabel pivot di Ubiq hanya dengan drag &drop?

Omong-omong, jika Anda ingin membuat tabel pivot, bagan &dasbor dari database PostgreSQL, Anda dapat mencoba Ubiq. Kami menawarkan uji coba gratis selama 14 hari.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang Baru di PgBouncer 1.6

  2. Tidak dapat menghubungkan postgreSQL dengan psycopg2

  3. Cara Membuat Titik Akhir Tunggal untuk Pengaturan Replikasi PostgreSQL Anda menggunakan HAProxy

  4. Cara Memilih Catatan dari 24 Jam Terakhir menggunakan PostgreSQL

  5. Mengapa saya tidak dapat mengecualikan kolom dependen dari `GROUP BY` saat saya mengagregasi berdasarkan kunci?