Pivottabeller är användbara för dataanalys, låter dig visa radvärden som kolumner för att enkelt få insikter. Det finns dock ingen funktion för att skapa en pivottabell i MySQL. Så du måste skriva SQL-fråga för att skapa pivottabell i MySQL. Lyckligtvis finns det många sätt att skapa pivottabell i MySQL. Låt oss snabbt titta på var och en av dem.
Hur man skapar en pivottabell i MySQL
Här är stegen för att skapa pivottabeller i MySQL. Låt oss säga att du har följande tabell
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 |
+------+------+------+-------+
Låt oss säga att du vill pivotera tabellen genom examen kolumn för att skapa 1 rad för varje elev och 1 kolumn för varje prov, som visas nedan.
+--------+-----------+-----------+-----------+------------+ | name | exam1 | exam2 | exam3 | exam4 | +--------+-----------+-----------+-----------+------------+ | Bob | 70 | 77 | 71 | 70 | | Sue | 89 | 87 | 88 | 89 | +--------+-----------+-----------+-----------+------------+
Du kan skapa en pivottabell i MySQL med hjälp av IF- eller CASE-satsen.
Bonus läsning: Hur man beräknar median i MySQL
Skapa pivottabell i MySQL med hjälp av IF-satsen
Här är SQL-frågan som överför rader till kolumner med hjälp av IF-satsen.
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 ovanstående fråga måste du gruppera efter namn kolumn eftersom du vill ha 1 rad för varje elev. Du måste också ange ett villkor för varje kolumn du behöver skapa, det vill säga ett villkor för varje prov
Skapa pivottabell i MySQL med CASE-satsen
Här är SQL-frågan för att konvertera rader till kolumner med CASE-satsen.
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 | +--------+-----------+-----------+-----------+------------+
Ovanstående fråga fungerar på samma sätt som den som använder IF-villkoret ovan. Du måste gruppera efter kolumnen som du vill pivotera dina data efter, det vill säga namn . Du måste också definiera en CASE-sats för varje provnummer eftersom du vill skapa separata kolumner för varje prov.
Du kan också kombinera provresultat i din pivottabell. Om du till exempel vill lägga ihop poängen för tenta1 och prov2 och visa dem i samma kolumn kan du använda följande fråga.
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 tabellen ovan har poängen för prov 1 och prov 2 lagts till och visas i en enda kolumn prov12, genom att helt enkelt ändra villkoret för 1:a CASE-satsen och ta bort den 2:a CASE-satsen.
Du kan anpassa ovanstående frågor enligt ditt krav för att skapa pivottabell i MySQL. Du kan också använda ett rapporteringsverktyg för att plotta resultatet i en tabell. Här är ett exempel på en tabell skapad med Ubiq.

Visste du att du kan skapa pivottabeller i Ubiq genom att bara dra och släppa?
Om du vill skapa pivottabeller, diagram och instrumentpaneler från MySQL-databasen kan du prova Ubiq. Vi erbjuder en 14-dagars gratis provperiod.