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

Come automatizzare le query delle tabelle pivot in MySQL

Le tabelle pivot semplificano l'analisi dei dati e ottengono utili tendenze. Tuttavia, potrebbe essere necessario automatizzare le query della tabella pivot per utilizzarle frequentemente. Poiché MySQL non ha una funzione per la creazione di tabelle pivot, è necessario scrivere una query SQL per automatizzare le tabelle pivot in MySQL. Diamo quindi un'occhiata a come automatizzare le query della tabella pivot in MySQL

Come automatizzare le query delle tabelle pivot in MySQL

Ecco i passaggi per automatizzare le query della tabella pivot in MySQL. Supponiamo che tu abbia la seguente tabella

CREATE TABLE Meeting
(
    ID INT,
    Meeting_id INT,
    field_key VARCHAR(100),
    field_value VARCHAR(100)
);

INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (1, 1,'first_name' , 'Alec');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (2, 1,'last_name' , 'Jones');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (3, 1,'occupation' , 'engineer');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (4,2,'first_name' , 'John');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (5,2,'last_name' , 'Doe');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (6,2,'occupation' , 'engineer');

+------+------------+------------+-------------+
| ID   | Meeting_id | field_key  | field_value |
+------+------------+------------+-------------+
|    1 |          1 | first_name | Alec        |
|    2 |          1 | last_name  | Jones       |
|    3 |          1 | occupation | engineer    |
|    4 |          2 | first_name | John        |
|    5 |          2 | last_name  | Doe         |
|    6 |          2 | occupation | engineer    |
+------+------------+------------+-------------+

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

+------------+-------------+-------------+-------------+
| Meeting_id | first_name  |  last_name  |  occupation |
+------------+-------------+-------------+-------------+
|          1 |       Alec  | Jones       | engineer    |
|          2 |       John  | Doe         | engineer    |
+------------+-------------+-------------+-------------+

Automatizzazione delle query sulla tabella pivot

Se conosci già il numero di colonne da creare, puoi creare query tabella pivot utilizzando l'istruzione CASE per creare una tabella pivot.

Tuttavia, molte volte non conosci le colonne che devi creare nelle tabelle pivot. In questi casi, puoi creare dinamicamente tabelle pivot utilizzando la query seguente.

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when exam = ''',
      exam,
      ''' then field_value end) ',
      field_key
    )
  ) INTO @sql
FROM
  Meeting;
SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' 
                  FROM Meeting 
                   GROUP BY Meeting_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Nelle istruzioni precedenti, GROUP_CONCAT consente di concatenare i valori field_key da più righe in un'unica stringa. Nella query precedente, utilizziamo GROUP_CONCAT per creare dinamicamente le istruzioni CASE, basate sui valori univoci nella colonna field_key e archiviate nella variabile @sql, che viene quindi utilizzata per creare la nostra query di selezione. Quindi ti aiuta ad automatizzare le query della tabella pivot in MySQL

+------------+------------+-----------+------------+
| Meeting_id | first_name | last_name | occupation |
+------------+------------+-----------+------------+
|          1 | Alec       | Jones     | engineer   |
|          2 | John       | Doe       | engineer   |
+------------+------------+-----------+------------+

Ora che sai come automatizzare le query della tabella pivot in MySQL, puoi personalizzarle secondo le tue esigenze aggiungendo la clausola WHERE o JOINS.

Se desideri ruotare solo i valori di riga selezionati come colonne, puoi aggiungere la clausola WHERE nella tua prima istruzione GROUP_CONCAT di selezione.

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when field_key = ''',
      field_key,
      ''' then field_value end) ',
      field_key
    )
  ) INTO @sql
FROM
  Meeting
WHERE <condition>;

Se desideri filtrare le righe nella tabella pivot finale, puoi aggiungere la clausola WHERE nella tua istruzione SET.

SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' 
                  FROM Meeting WHERE <condition>
                   GROUP BY Meeting_id');

Allo stesso modo, puoi anche applicare JOINS nella tua query SQL mentre trasponi le righe in colonne in modo dinamico in MySQL.

Puoi automatizzare le query della tabella pivot utilizzando uno strumento di reporting. Ecco un esempio di tabella pivot automatizzata creata utilizzando Ubiq.

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

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