MySQL est l’un des systèmes de gestion de bases de données relationnelles les plus populaires au monde. MySQL nous permet de stocker, de gérer et d’analyser des données sous forme de tableaux. Une table se compose de lignes et de colonnes qui représentent des entités et des attributs de données. Cependant, nous devons parfois modifier la forme du tableau pour convertir les lignes en colonnes ou vice versa. C’est ce qu’on appelle la transposition de table.
Les tableaux de transposition peuvent être utiles pour plusieurs raisons, telles que :
- Simplifiez la visualisation et la compréhension des données
- Optimiser les performances des requêtes et des index
- Adaptez les structures de données aux besoins de l’entreprise ou des applications
- Effectuer des opérations d’agrégation ou de calcul sur des données

Cependant, MySQL ne dispose pas d’une fonction intégrée permettant de transposer directement les tables. Par conséquent, nous devons utiliser certaines techniques ou astuces pour atteindre cet objectif. Dans cet article, nous allons discuter de plusieurs façons de changer la forme d’un tableau pour convertir des lignes en colonnes dans MySQL, ainsi que des exemples et des explications.
Méthode 1 : Utilisation de la fonction d’agrégation et de la clause GROUP BY
Une façon de changer la forme d’une table pour convertir des lignes en colonnes dans MySQL est d’utiliser la fonction d’agrégation et la clause GROUP BY. Une fonction d’agrégation est une fonction qui prend un ensemble de valeurs en entrée et renvoie une seule valeur en sortie. Certaines fonctions d’agrégation couramment utilisées dans MySQL sont les suivantes :
- SUM() : Calcule le nombre total d’un ensemble de valeurs
- AVG() : Calcule la moyenne d’un ensemble de valeurs
- MIN() : Renvoie la plus petite valeur d’un ensemble de valeurs
- MAX() : Renvoie la plus grande valeur d’un ensemble de valeurs
- COUNT() : Compte le nombre de valeurs présentes dans un ensemble de valeurs
Une clause GROUP BY est une clause utilisée pour regrouper des lignes qui ont la même valeur dans une ou plusieurs colonnes. La clause GROUP BY est généralement utilisée conjointement avec une fonction d’agrégation pour calculer les valeurs agrégées de chaque groupe.
Pour modifier le formulaire de la table afin de convertir les lignes en colonnes à l’aide de la fonction d’agrégation et de la clause GROUP BY, nous devons effectuer les étapes suivantes :
- Spécifiez la colonne qui sera la nouvelle ligne dans le tableau des résultats. Cette colonne est généralement une colonne qui a des valeurs différentes et pas trop. Par exemple, les colonnes d’année, de mois, de catégorie, de type, etc.
- Spécifiez la colonne qui sera la nouvelle colonne dans la table de résultats. Il s’agit généralement d’une colonne qui a la même valeur ou une valeur limitée pour chaque ligne. Par exemple, les colonnes de nom, de produit, de marque, etc.
- Spécifiez la fonction d’agrégation qui sera utilisée pour calculer la valeur de chaque nouvelle combinaison de lignes et de colonnes. Cette fonction d’agrégation dépend du type de données et de l’objectif de notre analyse. Par exemple, SUM(), AVG(), MIN(), MAX(), etc.
- Créez une requête SQL qui utilise la fonction d’agrégation et la clause GROUP BY pour renvoyer la table de résultats souhaitée.
Prenons un exemple pour mieux comprendre cela. Supposons que nous ayons le tableau suivant qui stocke les données sur les ventes de produits pour chaque mois et chaque catégorie :
month | category | sales |
Jan | A | 100 |
Jan | B | 200 |
Jan | C | 300 |
Feb | A | 150 |
Feb | B | 250 |
Feb | C | 350 |
Mar | A | 200 |
Mar | B | 300 |
Mar | C | 400 |
Ce tableau comporte trois colonnes : mois, catégorie et ventes. Nous voulons modifier la forme de ce tableau pour convertir les lignes en colonnes, afin de pouvoir voir les ventes totales pour chaque catégorie et chaque mois dans un seul tableau. Le tableau de résultats que nous voulons est le suivant :
category | Jan | Feb | Mar |
A | 100 | 150 | 200 |
B | 200 | 250 | 300 |
C | 300 | 350 | 400 |
Pour atteindre cet objectif, nous pouvons utiliser la méthode 1 avec les étapes suivantes :
- Spécifiez la colonne qui sera la nouvelle ligne dans le tableau des résultats. Dans ce cas, la colonne de catégorie sera une nouvelle ligne, car elle a des valeurs différentes et pas trop (A, B, C).
- Spécifiez la colonne qui sera la nouvelle colonne dans la table de résultats. Dans ce cas, la colonne du mois sera la nouvelle colonne, car elle a la même valeur ou une valeur limitée pour chaque ligne (janvier, février, mars).
- Spécifiez la fonction d’agrégation qui sera utilisée pour calculer la valeur de chaque nouvelle combinaison de lignes et de colonnes. Dans ce cas, nous utiliserons la fonction SUM() pour calculer les ventes totales pour chaque catégorie et chaque mois.
- Créez une requête SQL qui utilise la fonction d’agrégation et la clause GROUP BY pour renvoyer la table de résultats souhaitée. Les requêtes SQL que nous pouvons utiliser sont les suivantes :
SELECT category SUM(CASE WHEN month ='Jan' THEN sales ELSE 0 END) AS Jan, SUM(CASE WHEN month ='Feb' THEN sales ELSE 0 END) AS Feb, SUM(CASE WHEN month ='Mar' THEN sales ELSE 0 END) AS Mar FROM sales_table GROUP BY category;
Cette requête effectue les opérations suivantes :
- Sélectionnez la colonne de catégorie dans le tableau sales_table
- Utilisez les fonctions SUM() et CASE pour calculer les ventes totales pour chaque catégorie et chaque mois. CASE est une instruction conditionnelle qui renvoie une valeur en fonction d’une condition donnée. Dans cette requête, nous utilisons CASE pour vérifier la valeur mensuelle et renvoyer la valeur des ventes le cas échéant, ou 0 dans le cas contraire. Par exemple, SUM(CASE WHEN month =’Jan’ THEN sales ELSE 0 END) renverra le total des ventes de janvier pour chaque catégorie, ou 0 s’il n’y a pas de ventes pour ce mois.
- Donnez un nom d’alias à chaque nouvelle colonne à l’aide de AS. Alias est un nom alternatif que l’on peut donner à une colonne ou à une table pour faciliter l’écriture et la lecture d’une requête. Dans cette requête, nous donnons un nom d’alias à chaque nouvelle colonne avec un nom de mois correspondant, tel que Jan, Feb et Mar.
- Utilisez la clause GROUP BY pour regrouper les lignes en fonction de la colonne de catégorie. La clause GROUP BY crée une ligne pour chaque valeur unique de la colonne de catégorie et calcule une valeur agrégée pour toutes les autres colonnes.
Cette requête générera la table de résultats souhaitée, comme indiqué ci-dessus.