Remodeler les données dans MySQL : convertir les données longues/longues en grand format
Dans l'analyse des données, il est souvent nécessaire de remodeler les données d'une longue /grand format à un format large. Cette transformation convertit une table avec plusieurs lignes et colonnes en une table avec moins de lignes et plus de colonnes.
Énoncé du problème
Considérez une table MySQL avec des données en format long/tall format, où chaque ligne représente une seule observation avec un pays, une clé et une valeur. L'objectif est de remodeler les données dans un format large, avec une ligne pour chaque pays et des colonnes pour chaque clé.
Solution SQL
MySQL fournit une fonctionnalité intégrée appelés tableaux croisés ou tableaux croisés dynamiques pour accomplir cette transformation. Voici comment procéder :
1. Identifier les clés
Utilisez une requête pour sélectionner des clés distinctes dans la table d'origine :
SELECT DISTINCT key FROM table;
La sortie de cette requête fournira une liste d'éléments clés.
2. Création de la table large
Créez une nouvelle table avec la structure suivante :
CREATE TABLE wide_table ( country VARCHAR(255), key1 VARCHAR(255), ..., keyN VARCHAR(255), newPkey INT AUTO_INCREMENT PRIMARY KEY );
Remplacez key1, ..., keyN par les noms de clés réels obtenus à l'étape 1. Le La colonne newPkey est une clé primaire à incrémentation automatique utilisée pour identifier de manière unique chaque ligne de la table large.
3. Remplissage des valeurs du tableau
Utilisez une requête croisée pour remplir le tableau large :
SELECT country, MAX(IF(key='President', value, NULL)) AS President, MAX(IF(key='Currency', value, NULL)) AS Currency, ... FROM table GROUP BY country;
Cette requête utilise l'agrégation conditionnelle (MAX et IF) pour attribuer des valeurs aux colonnes clés pour chaque pays. Les lignes avec des clés en double pour le même pays sont éliminées à l'aide de la fonction MAX.
Exemple d'entrée et de sortie
Entrée :
country | attrName | attrValue | key |
---|---|---|---|
US | President | Obama | 2 |
US | Currency | Dollar | 3 |
China | President | Hu | 4 |
China | Currency | Yuan | 5 |
Sortie :
country | President | Currency | newPkey |
---|---|---|---|
US | Obama | Dollar | 1 |
China | Hu | Yuan | 2 |
Cet exemple démontre la transformation du format long/haut au format large à l'aide des tableaux croisés MySQL.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!