sql >> Databasteknik >  >> RDS >> Mysql

Hur man skapar pivottabell i MySQL

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.

  1. Hur man installerar Adminer på sin egen app

  2. Hur hanterar man valfria parametrar i SQL-fråga?

  3. Hur kastar jag en sträng till heltal och har 0 vid fel i casten med PostgreSQL?

  4. NLS_LOWER() Funktion i Oracle