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

Cara Membuat Tabel Pivot di MySQL

Tabel pivot berguna untuk analisis data, memungkinkan Anda menampilkan nilai baris sebagai kolom untuk mendapatkan wawasan dengan mudah. Namun, tidak ada fungsi untuk membuat tabel pivot di MySQL. Jadi, Anda perlu menulis kueri SQL untuk membuat tabel pivot di MySQL. Untungnya ada banyak cara untuk membuat Pivot Table di MySQL. Mari kita lihat satu per satu dengan cepat.

Cara Membuat Tabel Pivot di MySQL

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

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

Anda dapat membuat tabel pivot di MySQL menggunakan pernyataan IF atau CASE.

Bonus baca: Cara Menghitung Median di MySQL

Membuat Tabel Pivot di MySQL menggunakan pernyataan IF

Berikut kueri SQL mentranspos baris ke kolom menggunakan pernyataan IF.

SELECT name,
sum(IF(exam=1, score, NULL)) AS exam1,
sum(IF(exam=2, score, NULL)) AS exam2,
sum(IF(exam=3, score, NULL)) AS exam3,
sum(IF(exam=4, score, NULL)) AS exam4
FROM exams
GROUP BY name;
+--------+-----------+-----------+-----------+------------+
|   name |    exam1  |    exam2  |    exam3  |    exam4   |
+--------+-----------+-----------+-----------+------------+
|   Bob  |     70    |     77    |     71    |     70     |
|   Sue  |     89    |     87    |     88    |     89     |
+--------+-----------+-----------+-----------+------------+

Dalam kueri di atas, Anda perlu mengelompokkan menurut nama kolom karena Anda ingin 1 baris untuk setiap siswa. Selain itu, Anda perlu memberikan 1 ketentuan untuk setiap kolom yang perlu Anda buat, yaitu, 1 ketentuan untuk setiap ujian

Membuat Tabel Pivot di MySQL menggunakan pernyataan CASE

Berikut kueri SQL untuk mengonversi baris menjadi kolom menggunakan pernyataan CASE.

SELECT name,
sum(CASE WHEN exam=1 THEN score ELSE NULL END) AS exam1,
sum(CASE WHEN exam=2 THEN score ELSE NULL END) AS exam2,
sum(CASE WHEN exam=3 THEN score ELSE NULL END) AS exam3,
sum(CASE WHEN exam=4 THEN score ELSE NULL END) AS exam4
FROM exams
GROUP BY name;
+--------+-----------+-----------+-----------+------------+
|   name |    exam1  |    exam2  |    exam3  |    exam4   |
+--------+-----------+-----------+-----------+------------+
|   Bob  |     70    |     77    |     71    |     70     |
|   Sue  |     89    |     87    |     88    |     89     |
+--------+-----------+-----------+-----------+------------+

Query di atas bekerja mirip dengan yang menggunakan kondisi IF di atas. Anda perlu mengelompokkan menurut kolom tempat Anda ingin memutar data, yaitu nama . Selain itu, Anda perlu menentukan 1 pernyataan KASUS untuk setiap nomor ujian karena Anda ingin membuat kolom terpisah untuk setiap ujian.

Anda juga dapat menggabungkan skor ujian di tabel pivot Anda. Misalnya, jika Anda ingin menjumlahkan nilai ujian1 dan ujian2 dan menampilkannya di kolom yang sama, Anda dapat menggunakan kueri berikut.

SELECT name,
sum(CASE WHEN exam=1 or exam=2 THEN score ELSE NULL END) AS exam12,
sum(CASE WHEN exam=3 THEN score ELSE NULL END) AS exam3,
sum(CASE WHEN exam=4 THEN score ELSE NULL END) AS exam4
FROM exams
GROUP BY name;
+--------+------------+-----------+-----------+------------+
|   name |    exam12  |    exam2  |    exam3  |    exam4   |
+--------+------------+-----------+-----------+------------+
|   Bob  |     147    |     77    |     71    |     70     |
|   Sue  |     176    |     87    |     88    |     89     |
+--------+------------+-----------+-----------+------------+

Pada tabel di atas, nilai ujian 1 dan ujian 2 telah ditambahkan dan ditampilkan dalam satu kolom ujian12, cukup dengan mengubah kondisi pernyataan KASUS ke-1, dan menghapus pernyataan KASUS ke-2.

Anda dapat menyesuaikan kueri di atas sesuai kebutuhan Anda untuk membuat tabel pivot di MySQL. Anda juga dapat menggunakan alat pelaporan untuk memplot hasil dalam tabel. Berikut contoh tabel 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 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. Kutipan tunggal, Kutipan ganda, dan Backtick di MySQL

  2. Bagaimana cara mencadangkan dan memulihkan basis data MySQL?

  3. Cara Menghapus Spasi Leading dan Trailing di MySQL

  4. Catat semua kueri di mysql

  5. Cara Mendapatkan Data Satu Bulan Terakhir di MySQL