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

Cara Mengotomatiskan Kueri Tabel Pivot di MySQL

Tabel Pivot memudahkan Anda menganalisis data dan mendapatkan tren yang bermanfaat. Namun, Anda mungkin perlu mengotomatiskan kueri tabel pivot untuk sering menggunakannya. Karena MySQL tidak memiliki fungsi untuk membuat tabel pivot, Anda perlu menulis kueri SQL untuk mengotomatiskan tabel pivot di MySQL. Jadi mari kita lihat cara mengotomatiskan kueri tabel pivot di MySQL

Cara Mengotomatiskan Kueri Tabel Pivot di MySQL

Berikut adalah langkah-langkah untuk mengotomatiskan kueri tabel pivot di MySQL. 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 memutar tabel dengan ujian kolom sehingga membuat 1 baris untuk setiap meeting_id dan 1 kolom untuk setiap field_key, seperti yang ditunjukkan di bawah ini.

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

Otomatiskan Kueri Tabel Pivot

Jika sudah mengetahui jumlah kolom yang akan dibuat, Anda dapat membuat kueri tabel pivot menggunakan pernyataan CASE untuk membuat tabel pivot.

Namun, sering kali Anda tidak mengetahui kolom yang perlu Anda buat di tabel pivot. Dalam kasus seperti itu, Anda dapat membuat tabel pivot secara dinamis menggunakan kueri berikut.

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when exam = ''',
      exam,
      ''' 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;

Dalam pernyataan di atas, GROUP_CONCAT memungkinkan Anda untuk menggabungkan nilai field_key dari beberapa baris menjadi string tunggal. Dalam kueri di atas, kami menggunakan GROUP_CONCAT untuk membuat pernyataan CASE secara dinamis, berdasarkan nilai unik di kolom field_key dan menyimpannya dalam variabel @sql, yang kemudian digunakan untuk membuat kueri pemilihan kami. Jadi ini membantu Anda mengotomatiskan kueri tabel pivot di MySQL

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

Sekarang setelah Anda mengetahui cara mengotomatiskan kueri tabel pivot di MySQL, Anda dapat menyesuaikannya 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.

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.

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 mentranspos baris ke kolom secara dinamis di MySQL.

Anda dapat mengotomatiskan kueri tabel pivot menggunakan alat pelaporan. Berikut adalah contoh tabel pivot otomatis yang dibuat menggunakan Ubiq.

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

Jika Anda ingin membuat tabel pivot, grafik, dasbor &laporan 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. Permintaan MySQL untuk mendapatkan nama kolom?

  2. Impor CSV ke MySQL

  3. Cara Menemukan Nilai Non-Numerik di Kolom di MySQL

  4. Menemukan id berikutnya yang tersedia di MySQL

  5. Cara Menghitung Margin Di MySQL