Pivottabeller er nyttige til dataanalyse og giver dig mulighed for at vise rækkeværdier som kolonner for nemt at få indsigt. Der er dog ingen funktion til at oprette en pivottabel i MySQL. Så du skal skrive SQL-forespørgsel for at oprette pivottabel i MySQL. Heldigvis er der mange måder at oprette pivottabel på i MySQL. Lad os hurtigt se på hver enkelt af dem.
Sådan opretter du pivottabel i MySQL
Her er trinene til at oprette pivottabel i MySQL. Lad os sige, at du har følgende tabel
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 |
+------+------+------+-------+
Lad os sige, at du vil dreje tabellen efter eksamen kolonne for at oprette 1 række for hver elev og 1 kolonne for hver eksamen, som vist nedenfor.
+--------+-----------+-----------+-----------+------------+ | name | exam1 | exam2 | exam3 | exam4 | +--------+-----------+-----------+-----------+------------+ | Bob | 70 | 77 | 71 | 70 | | Sue | 89 | 87 | 88 | 89 | +--------+-----------+-----------+-----------+------------+
Du kan oprette en pivottabel i MySQL ved hjælp af IF- eller CASE-sætning.
Bonus læse: Sådan beregner du median i MySQL
Opret pivottabel i MySQL ved hjælp af IF-sætning
Her er SQL-forespørgslen, der transponerer rækker til kolonner ved hjælp af IF-sætning.
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 | +--------+-----------+-----------+-----------+------------+
I ovenstående forespørgsel skal du gruppere efter navn kolonne, da du ønsker 1 række for hver elev. Du skal også angive 1 betingelse for hver kolonne, du skal oprette, det vil sige 1 betingelse for hver eksamen
Opret pivottabel i MySQL ved hjælp af CASE-sætning
Her er SQL-forespørgslen til at konvertere rækker til kolonner ved hjælp af CASE-sætning.
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 | +--------+-----------+-----------+-----------+------------+
Ovenstående forespørgsel fungerer på samme måde som den, der bruger IF-betingelsen ovenfor. Du skal gruppere efter den kolonne, som du vil pivotere dine data efter, dvs. navn . Du skal også definere 1 CASE-udsagn for hvert eksamensnummer, da du vil oprette separate kolonner for hver eksamen.
Du kan også kombinere eksamensresultater i din pivottabel. Hvis du f.eks. vil lægge point for eksamen1 og eksamen2 sammen og vise dem i samme kolonne, kan du bruge følgende forespørgsel.
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 | +--------+------------+-----------+-----------+------------+
I ovenstående tabel er scorerne for eksamen 1 og eksamen 2 blevet tilføjet og vist i en enkelt kolonne eksamen12 ved blot at ændre betingelsen for 1. CASE-sætning og fjerne 2. CASE-sætning.
Du kan tilpasse ovenstående forespørgsler efter dit krav om at oprette pivottabel i MySQL. Du kan også bruge et rapporteringsværktøj til at plotte resultatet i en tabel. Her er et eksempel på en tabel oprettet ved hjælp af Ubiq.

Vidste du, at du kan oprette pivottabeller i Ubiq ved blot at trække og slippe?
Hvis du vil oprette pivottabeller, diagrammer og dashboards fra MySQL-databasen, kan du prøve Ubiq. Vi tilbyder en 14-dages gratis prøveperiode.