Heim > Datenbank > MySQL-Tutorial > Wie simuliere ich Pivot-Tabellen in MySQL mit UNION ALL und Aggregation?

Wie simuliere ich Pivot-Tabellen in MySQL mit UNION ALL und Aggregation?

Mary-Kate Olsen
Freigeben: 2025-01-09 15:16:42
Original
141 Leute haben es durchsucht

How to Simulate Pivot Tables in MySQL Using UNION ALL and Aggregation?

Simulation einer Pivot-Tabelle in MySQL: Verwendung von UNION ALL und Aggregatfunktionen

Pivot-Tabellen spielen eine Schlüsselrolle bei der Datenanalyse und Berichterstellung, indem sie Spaltendaten in zeilenbasierte Daten umwandeln, um kompaktere und aufschlussreichere Visualisierungen zu erzielen. Obwohl MySQL die Funktionen UNPIVOT und PIVOT nicht direkt bereitstellt, können wir UNION ALL und Aggregatfunktionen geschickt kombinieren, um ähnliche Funktionen zu erreichen.

Datenentpivotierung

Der erste Schritt in einer Pivot-Tabelle besteht darin, die Daten zu erweitern oder in ein flexibleres Format zu konvertieren. Dazu müssen für jede Datenspalte mehrere Zeilen erstellt werden, wobei jede Zeile eine Spalte und den entsprechenden Wert darstellt. Um dies zu erreichen, können wir den Operator UNION ALL verwenden:

<code class="language-sql">SELECT id, month, col1 AS value, 'col1' AS descrip
FROM yourTable
UNION ALL
SELECT id, month, col2 AS value, 'col2' AS descrip
FROM yourTable
UNION ALL
SELECT id, month, col3 AS value, 'col3' AS descrip
FROM yourTable
UNION ALL
SELECT id, month, col4 AS value, 'col4' AS descrip
FROM yourTable;</code>
Nach dem Login kopieren

Diese Abfrage generiert die folgenden Ergebnisse:

id month value descrip
101 Jan A col1
102 Feb C col1
101 Jan B col2
102 Feb A col2
101 Jan NULL col3
102 Feb G col3
101 Jan B col4
102 Feb E col4

Pivotierung von Daten erweitern

Sobald die Daten erweitert sind, können wir sie mithilfe von Aggregatfunktionen und CASE Anweisungen schwenken, um das gewünschte Berichtsformat zu erstellen:

<code class="language-sql">SELECT descrip,
  MAX(CASE WHEN month = 'Jan' THEN value ELSE 0 END) AS jan,
  MAX(CASE WHEN month = 'Feb' THEN value ELSE 0 END) AS feb
FROM (
    SELECT id, month, col1 AS value, 'col1' AS descrip
    FROM yourTable
    UNION ALL
    SELECT id, month, col2 AS value, 'col2' AS descrip
    FROM yourTable
    UNION ALL
    SELECT id, month, col3 AS value, 'col3' AS descrip
    FROM yourTable
    UNION ALL
    SELECT id, month, col4 AS value, 'col4' AS descrip
    FROM yourTable
) AS src
GROUP BY descrip;</code>
Nach dem Login kopieren

Die obige Abfrage liefert die folgenden Ergebnisse:

descrip jan feb
col1 A C
col2 B A
col3 0 G
col4 B E

Dieses Ergebnis entspricht dem Format des erforderlichen Berichts. Durch diese Technologien können wir Pivot-Tabellenfunktionen effektiv in MySQL implementieren und spaltenbasierte Daten einfach in zeilenbasierte Berichte konvertieren, was eine effizientere Analyse und Berichterstattung ermöglicht.

Das obige ist der detaillierte Inhalt vonWie simuliere ich Pivot-Tabellen in MySQL mit UNION ALL und Aggregation?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage