Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara Membuat Tabel Pivot Dinamis di MySQL

Tabel pivot memudahkan untuk menganalisis volume data yang besar dengan mengatur informasi ke dalam kumpulan data yang lebih kecil dan dapat dikelola. Namun, tidak ada fungsi bawaan untuk mencapai pivot di MySQL. Kita perlu menulis kueri SQL untuk mengonversi baris ke kolom di MySQL, dan kemudian membuat laporan pivot di MySQL. Jadi mari kita lihat cara membuat tabel pivot dinamis di MySQL.

Cara Membuat Tabel Pivot Dinamis di MySQL

Jika Anda ingin membuat tabel pivot di MySQL, Anda biasanya akan menggunakan pernyataan IF/CASE. Namun, pendekatan ini hanya berfungsi jika Anda sudah mengetahui semua kolom yang perlu Anda buat di tabel pivot.

Bagaimana Anda membuat tabel pivot dinamis di MySQL, ketika Anda tidak tahu kolom yang akan dibuat, atau jika Anda mengharapkannya berubah seiring waktu? Dalam kasus seperti itu, kami menggunakan GROUP_CONCAT fungsi.

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 dinamis, sehingga kolom baru dibuat untuk setiap nilai unik di field_key kolom, yaitu (nama_depan, nama_belakang, pekerjaan)

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

Membuat Tabel Pivot Dinamis di MySQL

Jika Anda sudah mengetahui kolom mana yang akan dibuat di tabel pivot, Anda dapat menggunakan pernyataan CASE untuk membuat tabel pivot. Namun, untuk membuat tabel pivot dinamis di MySQL, kami menggunakan GROUP_CONCAT berfungsi untuk mentranspos baris ke kolom secara dinamis, seperti yang ditunjukkan di bawah ini.

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when field_key = ''',
      field_key,
      ''' then field_value end) ',
      field_key
    )
  ) INTO @sql 
FROM
  Meeting;
SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' 
                  FROM Meeting 
                   GROUP BY Meeting_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

GROUP_CONCAT memungkinkan Anda untuk menggabungkan nilai dari beberapa baris menjadi satu string. Dalam kueri di atas, kami menggunakan GROUP_CONCAT untuk membuat pernyataan CASE secara dinamis, berdasarkan nilai unik di field_key kolom dan simpan string itu dalam variabel @sql. Ini kemudian digunakan untuk membuat kueri pemilihan kami.

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

Dengan cara ini Anda dapat mengotomatiskan kueri tabel pivot di MySQL.

Anda dapat menyesuaikan kueri di atas sesuai kebutuhan Anda dengan menambahkan klausa WHERE atau GABUNG.

Jika Anda ingin pivot hanya memilih nilai baris sebagai kolom, Anda dapat menambahkan klausa WHERE dalam pernyataan GROUP_CONCAT pilihan pertama Anda, seperti yang ditunjukkan dalam tebal di bawah

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when field_key = ''',
      field_key,
      ''' then field_value end) ',
      field_key
    )
  ) INTO @sql
FROM
  Meeting
WHERE <condition>;

Jika Anda ingin memfilter baris dalam tabel pivot akhir, Anda dapat menambahkan klausa WHERE dalam pernyataan SET seperti yang ditunjukkan dalam tebal di bawah.

SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' 
                  FROM Meeting WHERE <condition>
                   GROUP BY Meeting_id');

Demikian pula, Anda juga dapat menerapkan GABUNG dalam kueri SQL saat Anda membuat tabel pivot dinamis di MySQL.

Setelah Anda membuat tabel pivot dinamis di MySQL, Anda dapat menggunakan alat pelaporan untuk memplotnya dalam sebuah tabel. Berikut adalah contoh tabel pivot yang dibuat menggunakan Ubiq.

Tahukah Anda bahwa Anda dapat membuat tabel pivot dinamis di Ubiq tanpa menulis SQL apa pun?

Omong-omong, jika Anda ingin membuat tabel pivot, bagan &dasbor dari database MySQL, 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. Bagaimana Fungsi LOWER() Bekerja di MySQL

  2. MySQL SELECT saja bukan nilai nol

  3. Cara Membatasi Baris dalam Kumpulan Hasil MySQL

  4. 5 Alat GUI MySQL Teratas (Gratis &Berbayar)

  5. Tutorial MySQL Workbench – Panduan Komprehensif Untuk Alat RDBMS