Umformen von Daten in MySQL: Konvertieren von Long/Tall in Breitformat
Bei der Datenanalyse ist es oft notwendig, Daten aus einem Long-/Tall-Format umzuformen /tall-Format in ein Breitformat umwandeln. Diese Transformation wandelt eine Tabelle mit mehreren Zeilen und Spalten in eine Tabelle mit weniger Zeilen und mehr Spalten um.
Problemstellung
Stellen Sie sich eine MySQL-Tabelle mit Daten im Lang-/Hochformat vor Format, wobei jede Zeile eine einzelne Beobachtung mit einem Land, einem Schlüssel und einem Wert darstellt. Ziel ist es, die Daten in ein Breitformat umzuwandeln, mit einer Zeile für jedes Land und Spalten für jeden Schlüssel.
SQL-Lösung
MySQL bietet eine integrierte Funktion sogenannte Kreuztabellen oder Pivot-Tabellen, um diese Transformation durchzuführen. So geht's:
1. Identifizieren von Schlüsseln
Verwenden Sie eine Abfrage, um verschiedene Schlüssel aus der Originaltabelle auszuwählen:
SELECT DISTINCT key FROM table;
Die Ausgabe dieser Abfrage liefert eine Liste von Schlüsselelementen.
2. Erstellen der breiten Tabelle
Erstellen Sie eine neue Tabelle mit der folgenden Struktur:
CREATE TABLE wide_table ( country VARCHAR(255), key1 VARCHAR(255), ..., keyN VARCHAR(255), newPkey INT AUTO_INCREMENT PRIMARY KEY );
Ersetzen Sie key1, ..., keyN durch die tatsächlichen Schlüsselnamen, die Sie in Schritt 1 erhalten haben. Die Die Spalte newPkey ist ein automatisch inkrementierender Primärschlüssel, der zur eindeutigen Identifizierung jeder Zeile in der breiten Tabelle verwendet wird.
3. Tabellenwerte füllen
Verwenden Sie eine Kreuztabellenabfrage, um die breite Tabelle zu füllen:
SELECT country, MAX(IF(key='President', value, NULL)) AS President, MAX(IF(key='Currency', value, NULL)) AS Currency, ... FROM table GROUP BY country;
Diese Abfrage nutzt bedingte Aggregation (MAX und IF), um den Schlüsselspalten Werte zuzuweisen für jedes Land. Zeilen mit doppelten Schlüsseln für dasselbe Land werden mithilfe der MAX-Funktion entfernt.
Beispieleingabe und -ausgabe
Eingabe:
country | attrName | attrValue | key |
---|---|---|---|
US | President | Obama | 2 |
US | Currency | Dollar | 3 |
China | President | Hu | 4 |
China | Currency | Yuan | 5 |
Ausgabe:
country | President | Currency | newPkey |
---|---|---|---|
US | Obama | Dollar | 1 |
China | Hu | Yuan | 2 |
Dieses Beispiel zeigt die Umwandlung vom Lang-/Hochformat ins Breitformat mithilfe von MySQL-Kreuztabellen.
Das obige ist der detaillierte Inhalt vonWie kann ich Long/Tall-Daten in MySQL in Wide-Format umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!