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

Come creare una tabella pivot in MySQL

Le tabelle pivot sono utili per l'analisi dei dati, ti consentono di visualizzare i valori delle righe come colonne per ottenere facilmente informazioni dettagliate. Tuttavia, non esiste alcuna funzione per creare una tabella pivot in MySQL. Quindi, è necessario scrivere una query SQL per creare una tabella pivot in MySQL. Fortunatamente ci sono molti modi per creare una tabella pivot in MySQL. Diamo un'occhiata a ciascuno di essi rapidamente.

Come creare una tabella pivot in MySQL

Ecco i passaggi per creare una tabella pivot in MySQL. Supponiamo che tu abbia la seguente tabella

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


Supponiamo che tu voglia ruotare la tabella per esame colonna in modo da creare 1 riga per ogni studente e 1 colonna per ogni esame, come mostrato di seguito.

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

Puoi creare una tabella pivot in MySQL usando l'istruzione IF o CASE.

Bonus letto: Come calcolare la mediana in MySQL

Crea una tabella pivot in MySQL usando l'istruzione IF

Ecco la query SQL che traspone le righe alle colonne usando l'istruzione IF.

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

Nella query precedente, devi raggruppare per nome colonna poiché vuoi 1 riga per ogni studente. Inoltre, devi fornire 1 condizione per ogni colonna che devi creare, ovvero 1 condizione per ogni esame

Crea una tabella pivot in MySQL usando l'istruzione CASE

Ecco la query SQL per convertire le righe in colonne utilizzando l'istruzione CASE.

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

La query precedente funziona in modo simile a quella che utilizza la condizione IF sopra. Devi raggruppare in base alla colonna in base alla quale desideri convertire i tuoi dati, ovvero nome . Inoltre, devi definire 1 istruzione CASE per ogni numero di esame poiché desideri creare colonne separate per ogni esame.

Puoi anche combinare i punteggi degli esami nella tabella pivot. Ad esempio, se desideri sommare i punteggi di esame1 ed esame2 e mostrarli nella stessa colonna, puoi utilizzare la query seguente.

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

Nella tabella sopra, i punteggi dell'esame 1 ed esame 2 sono stati aggiunti e visualizzati in un'unica colonna esame12, semplicemente modificando la condizione della 1a istruzione CASE, e rimuovendo la 2a istruzione CASE.

Puoi personalizzare le query di cui sopra in base alle tue esigenze per creare una tabella pivot in MySQL. Puoi anche utilizzare uno strumento di reporting per tracciare il risultato in una tabella. Ecco un esempio di tabella creata con Ubiq.

Sapevi che puoi creare tabelle pivot in Ubiq semplicemente trascinando e rilasciando?

Se vuoi creare tabelle pivot, grafici e dashboard dal database MySQL, puoi provare Ubiq. Offriamo una prova gratuita di 14 giorni.