Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment automatiser les requêtes de tableau croisé dynamique dans MySQL

Les tableaux croisés dynamiques facilitent l'analyse de vos données et obtiennent des tendances utiles. Cependant, vous devrez peut-être automatiser les requêtes de tableau croisé dynamique pour les utiliser fréquemment. Étant donné que MySQL n'a pas de fonction pour créer des tableaux croisés dynamiques, vous devez écrire une requête SQL pour automatiser les tableaux croisés dynamiques dans MySQL. Voyons donc comment automatiser les requêtes de tableau croisé dynamique dans MySQL

Comment automatiser les requêtes de tableau croisé dynamique dans MySQL

Voici les étapes pour automatiser les requêtes de tableau croisé dynamique dans MySQL. Disons que vous avez le tableau suivant

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

Supposons que vous souhaitiez faire pivoter le tableau par examen afin de créer 1 ligne pour chaque meeting_id et 1 colonne pour chaque field_key, comme indiqué ci-dessous.

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

Automatiser les requêtes de tableau croisé dynamique

Si vous connaissez déjà le nombre de colonnes à créer, vous pouvez créer des requêtes de tableau croisé dynamique à l'aide de l'instruction CASE pour créer un tableau croisé dynamique.

Cependant, il arrive souvent que vous ne connaissiez pas les colonnes que vous devez créer dans les tableaux croisés dynamiques. Dans de tels cas, vous pouvez créer dynamiquement des tableaux croisés dynamiques à l'aide de la requête suivante.

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;

Dans les instructions ci-dessus, GROUP_CONCAT vous permet de concaténer les valeurs field_key de plusieurs lignes en une seule chaîne. Dans la requête ci-dessus, nous utilisons GROUP_CONCAT pour créer dynamiquement des instructions CASE, basées sur les valeurs uniques dans la colonne field_key et les stocker dans la variable @sql, qui est ensuite utilisée pour créer notre requête select. Il vous aide donc à automatiser les requêtes de tableau croisé dynamique dans MySQL

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

Maintenant que vous savez comment automatiser les requêtes de tableau croisé dynamique dans MySQL, vous pouvez les personnaliser selon vos besoins en ajoutant la clause WHERE ou JOINS.

Si vous souhaitez faire pivoter uniquement les valeurs de ligne sélectionnées en tant que colonnes, vous pouvez ajouter la clause WHERE dans votre 1ère instruction select GROUP_CONCAT.

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

Si vous souhaitez filtrer les lignes de votre tableau croisé dynamique final, vous pouvez ajouter la clause WHERE dans votre instruction SET.

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

De même, vous pouvez également appliquer des JOINS dans votre requête SQL pendant que vous transposez dynamiquement des lignes en colonnes dans MySQL.

Vous pouvez automatiser les requêtes de tableau croisé dynamique à l'aide d'un outil de création de rapports. Voici un exemple de tableau croisé dynamique créé avec Ubiq.

Saviez-vous que vous pouvez créer des tableaux croisés dynamiques dans Ubiq par simple glisser-déposer ?

Si vous souhaitez créer des tableaux croisés dynamiques, des graphiques, des tableaux de bord et des rapports à partir de la base de données MySQL, vous pouvez essayer Ubiq. Nous offrons un essai gratuit de 14 jours.