Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So erstellen Sie eine Pivot-Tabelle in MySQL

Pivot-Tabellen sind nützlich für die Datenanalyse und ermöglichen es Ihnen, Zeilenwerte als Spalten anzuzeigen, um auf einfache Weise Einblicke zu erhalten. Es gibt jedoch keine Funktion zum Erstellen einer Pivot-Tabelle in MySQL. Sie müssen also eine SQL-Abfrage schreiben, um eine Pivot-Tabelle in MySQL zu erstellen. Glücklicherweise gibt es viele Möglichkeiten, Pivot-Tabellen in MySQL zu erstellen. Sehen wir uns kurz jeden von ihnen an.

Wie man eine Pivot-Tabelle in MySQL erstellt

Hier sind die Schritte zum Erstellen einer Pivot-Tabelle in MySQL. Angenommen, Sie haben die folgende Tabelle

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


Angenommen, Sie möchten die Tabelle nach Prüfung pivotieren Spalte, um 1 Zeile für jeden Schüler und 1 Spalte für jede Prüfung zu erstellen, wie unten gezeigt.

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

Sie können eine Pivot-Tabelle in MySQL mit der IF- oder CASE-Anweisung erstellen.

Bonuslektüre: So berechnen Sie den Median in MySQL

Pivot-Tabelle in MySQL mit IF-Anweisung erstellen

Hier ist die SQL-Abfrage, die Zeilen mithilfe der IF-Anweisung in Spalten transponiert.

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

In der obigen Abfrage müssen Sie gruppieren nach Name Spalte, da Sie 1 Zeile für jeden Schüler haben möchten. Außerdem müssen Sie 1 Bedingung für jede zu erstellende Spalte angeben, d. h. 1 Bedingung für jede Prüfung

Pivot-Tabelle in MySQL mit CASE-Anweisung erstellen

Hier ist die SQL-Abfrage zum Konvertieren von Zeilen in Spalten mithilfe der CASE-Anweisung.

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

Die obige Abfrage funktioniert ähnlich wie die obige, die die IF-Bedingung verwendet. Sie müssen nach der Spalte gruppieren, nach der Sie Ihre Daten pivotieren möchten, also Name . Außerdem müssen Sie 1 CASE-Anweisung für jede Prüfungsnummer definieren, da Sie separate Spalten für jede Prüfung erstellen möchten.

Sie können auch Prüfungsergebnisse in Ihrer Pivot-Tabelle kombinieren. Wenn Sie beispielsweise die Ergebnisse von Prüfung1 und Prüfung2 addieren und in derselben Spalte anzeigen möchten, können Sie die folgende Abfrage verwenden.

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

In der obigen Tabelle wurden die Ergebnisse von Prüfung 1 und Prüfung 2 hinzugefügt und in einer einzigen Spalte Prüfung12 angezeigt, indem einfach die Bedingung der ersten CASE-Anweisung geändert und die zweite CASE-Anweisung entfernt wurde.

Sie können die obigen Abfragen gemäß Ihren Anforderungen anpassen, um eine Pivot-Tabelle in MySQL zu erstellen. Sie können auch ein Berichtstool verwenden, um das Ergebnis in einer Tabelle darzustellen. Hier ist ein Beispiel für eine Tabelle, die mit Ubiq erstellt wurde.

Wussten Sie, dass Sie Pivot-Tabellen in Ubiq einfach per Drag &Drop erstellen können?

Wenn Sie Pivot-Tabellen, Diagramme und Dashboards aus einer MySQL-Datenbank erstellen möchten, können Sie Ubiq ausprobieren. Wir bieten eine 14-tägige kostenlose Testversion an.