sql >> Database teknologi >  >> RDS >> Mysql

Sådan opretter du pivottabel i MySQL

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.

  1. Databasetjenester på AWS og Oracle Cloud Platform

  2. Får kun måned og år fra SQL DATE

  3. PostgreSQL DATEADD() Tilsvarende

  4. Tilslutning af Oracle til SQL Server over en sikker forbindelse