Heim >Datenbank >MySQL-Tutorial >Wie können Daten in MySQL mithilfe von Aggregatfunktionen und CASE-Anweisungen dynamisch geschwenkt werden?
Dynamisches Pivotieren von Daten mit den Aggregatfunktionen und der CASE-Anweisung von MySQL
Betrachten Sie eine Tabelle mit Produktteilen mit dem folgenden Schema:
CREATE TABLE Parts ( part_id INT NOT NULL, part_type CHAR(1) NOT NULL, product_id INT NOT NULL, PRIMARY KEY (part_id) );
Probe Daten:
INSERT INTO Parts (part_id, part_type, product_id) VALUES (1, 'A', 1), (2, 'B', 1), (3, 'A', 2), (4, 'B', 2), (5, 'A', 3), (6, 'B', 3);
Ziel ist es, diese Daten in eine Tabelle zu überführen, die die Produktteile als Spalten darstellt:
CREATE TABLE PivotedParts ( product_id INT NOT NULL, part_A_id INT, part_B_id INT, PRIMARY KEY (product_id) );
Dynamische Pivotierungslösung:
MySQL verfügt nicht über eine integrierte PIVOT-Funktion, aber eine dynamische Lösung kann mithilfe von Aggregatfunktionen und einem CASE erreicht werden Anweisung:
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when part_type = ''', part_type, ''' then part_id end) AS part_', part_type, '_id' ) ) INTO @sql FROM Parts; SET @sql = CONCAT('SELECT product_id, ', @sql, ' FROM Parts GROUP BY product_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
Beispielausgabe:
+------------+----------+----------+ | product_id | part_A_id | part_B_id | +------------+----------+----------+ | 1 | 1 | 2 | | 2 | 3 | 4 | | 3 | 5 | 6 | +------------+----------+----------+
Statische Pivotlösung (für eine begrenzte Anzahl von Spalten):
Für eine statische Pivot-Lösung mit einer begrenzten Anzahl von Spalten kann die folgende Abfrage sein verwendet:
SELECT product_id, max(case when part_type ='A' then part_id end) as part_A_id, max(case when part_type ='B' then part_id end) as part_B_id FROM Parts GROUP BY product_id;
Ausgabe:
+------------+----------+----------+ | product_id | part_A_id | part_B_id | +------------+----------+----------+ | 1 | 1 | 2 | | 2 | 3 | 4 | | 3 | 5 | 6 | +------------+----------+----------+
Das obige ist der detaillierte Inhalt vonWie können Daten in MySQL mithilfe von Aggregatfunktionen und CASE-Anweisungen dynamisch geschwenkt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!