MySQL-Zeilen-zu-Spalten-Operation Die sogenannte Zeilen-zu-Spalten-Operation dient dazu, die Zeileninformationen einer Tabelle in Spalteninformationen umzuwandeln. Sie ist vielleicht etwas allgemein gehalten. Hier ist ein Beispiel: +----+----------+--------+-------+ | ID | BENUTZERNAME | KURS | ERGEBNIS | +----+----------+--------+-------+ | | Zhang San| Mathematik| | | | Zhang San| Chinesisch| | | | Zhang San| Englisch| | | | Li Si| Mathematik| | | | Li Si| Chinesisch| | | | Li Si| Englisch| | | | Wang Wu| Mathematik| | | | Wang Wu| Chinesisch| | | | Wang Wu| Englisch| | +----+----------+--------+-------+ Zeilen im Set (0,00 Sek.) +-------------+--------+--------+--------+ | Benutzername | Mathematik| Chinesisch| Englisch| +-------------+--------+--------+--------+ | Zhang San| | | | | Li Si| | | | | Wang Wu| | | | +-------------+--------+--------+--------+ Zeilen im Set (0,00 Sek.) Im obigen Beispiel enthält Tabelle 1 die drei Noten von drei Schülern, während Tabelle 2 die Zeilendatensatzinformationen (Fach, Name) von Tabelle 1 in Spalteninformationen umwandelt und diese in Gruppen entsprechend der unterschiedlichen Benutzernamen anzeigt. 1 Fall, wenn Betriebsmethode Um die obige Funktion zu erreichen, müssen wir eine Analyse durchführen. Zuerst müssen wir drei Spalten generieren, nämlich Mathematik, Chinesisch und Englisch, und dann die entsprechenden Daten für die Werte in jeder Spalte eintragen. Hier müssen wir den MySQL-Fall verwenden, wenn die Operation dann endet, was eine bedingte Operation ist. Zu dieser bedingten Anweisung geben wir zunächst eine Erklärung: Fall-Spalte wenn Bedingung1 dann Ergebnis1 wenn Bedingung2 dann Ergebnis2 wenn Bedingung3 dann Ergebnis3 sonst Ergebnis4 Ende Die obige Syntax kann so verstanden werden: Wenn der Wert der Spalte Bedingung1 erfüllt, verwenden Sie „result1“, um den Wert der Spalte zu ersetzen, usw. Wenn der Spaltenwert die Bedingung nicht erfüllt, verwenden Sie „result4“, um den Wert der Spalte zu ersetzen. Nun starten wir das Experiment: Zuerst erstellen wir eine Tabelle und tragen folgende Daten ein: mysql-yeyz ::>>Wählen Sie * aus test_tbl; +----+----------+--------+-------+ | ID | BENUTZERNAME | KURS | ERGEBNIS | +----+----------+--------+-------+ | | Zhang San| Mathematik| | | | Zhang San| Chinesisch| | | | Zhang San| Englisch| | | | Li Si| Mathematik| | | | Li Si| Chinesisch| | | | Li Si| Englisch| | | | Wang Wu| Mathematik| | | | Wang Wu| Chinesisch| | | | Wang Wu| Englisch| | +----+----------+--------+-------+ Zeilen im Set (0,00 Sek.) Gemäß der obigen Syntax definieren wir, wenn der Kurs „Mathematik“ ist, eine Spalte „Mathematik“ und füllen sie mit der Punktzahl. Wenn wir auf „Chinesisch“ oder „Englisch“ stoßen, ersetzen wir es durch 0. Wir können zunächst das folgende allgemeine SQL schreiben: mysql-yeyz ::>>SELECT Benutzername , (FALL Kurs, WENN 'Kurs', DANN Punktzahl, SONST ENDE) Kurs VON test_tbl; +-------------+--------+ | Benutzername | Mathematik | +-------------+--------+ | Zhang San| | | Zhang San| | | Zhang San| | | Li Si| | | Li Si| | | Li Si| | | Wang Wu| | | Wang Wu| | | Wang Wu| | +-------------+--------+ Zeilen im Set (0,00 Sek.) Wir stellen fest, dass die obige Tabelle nur zwei Spalten hat. Gemäß den SQL-Regeln können wir die Werte „Chinesisch“ und „Englisch“ hinzufügen und mehrere weitere Spalten gleichzeitig schreiben, wie folgt: mysql-yeyz ::>>SELECT Benutzername , -> (CASE Kurs WENN 'Mathematik' DANN Punktzahl SONST ENDE ) Mathematik, -> (CASE Kurs WENN 'Chinesisch' DANN Punktzahl SONST ENDE ) Chinesisch, -> (CASE Kurs, wenn „Englisch“, dann Punktzahl, sonst Ende) Englisch -> von Test_tbl; +-------------+--------+--------+--------+ | Benutzername | Mathematik| Chinesisch| Englisch| +-------------+--------+--------+--------+ | Zhang San| | | | | Zhang San| | | | | Zhang San| | | | | Li Si| | | | | Li Si| | | | | Li Si| | | | | Wang Wu| | | | | Wang Wu| | | | | Wang Wu| | | | +-------------+--------+--------+--------+ Zeilen im Set (0,00 Sek.) Jetzt haben wir alle Datensätze und sind fast am Ziel. Sehen wir uns den Unterschied zum Endergebnis an: +-------------+--------+--------+--------+ | Benutzername | Mathematik| Chinesisch| Englisch| +-------------+--------+--------+--------+ | Zhang San| | | | | Li Si| | | | | Wang Wu| | | | +-------------+--------+--------+--------+ Es scheint, dass nur noch die Informationen der Studenten mit demselben Namen zusammengeführt werden müssen. Natürlich denken wir an die Operation group_by (Benutzername), und die Operation group_by muss mit einigen Aggregatfunktionen (MAX, MIN, AVG, SUM, COUNT usw.) kombiniert werden. Da jeder Datensatz nur die Punktzahl des aktuellen Subjekts enthält und die Punktzahlen der anderen Subjekte 0 sind, sind die Ergebnisse bei Verwendung der MAX-Funktion und der SUM-Funktion dieselben, aber die AVG-Funktion und die MIN-Funktion können nicht verwendet werden. Dies sollte leicht zu verstehen sein. Nachfolgend geben wir das Endergebnis an: mysql-yeyz 13:55:52>>SELECT Benutzername, -> MAX(CASE Kurs WENN 'Kurs' DANN Punktzahl SONST ENDE ) Mathematik, -> MAX(CASE Kurs WENN 'Chinesisch' DANN Punktzahl SONST ENDE ) Chinesisch, -> MAX(CASE Kurs WENN 'Englisch' DANN Punktzahl SONST ENDE ) Englisch-> FROM test_tbl -> GRUPPE NACH BENUTZERNAME; +-------------+--------+--------+--------+ | Benutzername | Mathematik| Chinesisch| Englisch| +-------------+--------+--------+--------+ | Zhang San | 34 | 58 | 58 | | 45 | 87 | 45 | | Wang Wu| 76 | 34 | 89 | +-------------+--------+--------+--------+ 3 Zeilen im Satz (0,00 Sek.) mysql-yeyz ::>>SELECT Benutzername , -> Summe (Fall Kurs, wenn 'Kurs', dann Punktzahl, sonst Ende) Mathematik, -> Summe (Fall Kurs, wenn 'Chinesisch', dann Punktzahl, sonst Ende) Chinesisch, -> Summe (Fall Kurs, wenn 'Englisch', dann Punktzahl, sonst Ende) Englisch -> von Testtabelle -> GRUPPE NACH BENUTZERNAME; +-------------+--------+--------+--------+ | Benutzername | Mathematik| Chinesisch| Englisch| +-------------+--------+--------+--------+ | Zhang San | 34 | 58 | 58 | | 45 | 87 | 45 | | Wang Wu| 76 | 34 | 89 | +-------------+--------+--------+--------+ 3 Zeilen im Satz (0,00 Sek.) mysql-yeyz ::>>SELECT Benutzername , -> MIN(CASE Kurs WENN 'Mathematik' DANN Punktzahl SONST ENDE ) Mathematik, -> MIN(CASE Kurs WENN 'Chinesisch' DANN Punktzahl SONST ENDE ) Chinesisch, -> MIN(CASE Kurs WENN 'Englisch' DANN Punktzahl SONST ENDE ) Englisch-> FROM test_tbl -> GRUPPE NACH BENUTZERNAME; +-------------+--------+--------+--------+ | Benutzername | Mathematik| Chinesisch| Englisch| +-------------+--------+--------+--------+ | 0 | 0 | 0 | | Li Si| 0 | 0 | 0 | | Wang Wu| 0 | 0 | 0 | +-------------+--------+--------+--------+ 3 Zeilen im Satz (0,00 Sek.) Es ist ersichtlich, dass die Ergebnisse bei Verwendung von MAX und SUM dieselben sind, die Verwendung von MIN als Aggregatfunktion jedoch dazu führt, dass das endgültige Ausgabeergebnis 0 ist, da jedes Mal der Mindestwert des durch den Benutzernamen angegebenen Betreffs ausgewählt wird, der 0 ist. Dieses Ergebnis ist leicht zu verstehen. 2 wenn Betriebsmethode Wenn man die obige Fall-When-Operationsmethode versteht, ist auch die If-Operationsmethode leicht zu verstehen. Das Prinzip ist dasselbe, außer dass die Syntax von Fall-When in die If-Methode umgewandelt wird, wie folgt mysql-yeyz 14:12:42>>SELECT Benutzername, -> MAX(wenn (Kurs= 'Mathematik',Punktzahl,) ) Mathematik, -> MAX(wenn (Kurs= 'Chinesisch',Punktzahl,) ) Chinesisch, -> MAX(wenn (Kurs= 'Englisch',Punktzahl,) ) Englisch-> FROM test_tbl -> GRUPPE NACH BENUTZERNAME; +-------------+--------+--------+--------+ | Benutzername | Mathematik| Chinesisch| Englisch| +-------------+--------+--------+--------+ | Zhang San | 34 | 58 | 58 | | 45 | 87 | 45 | | Wang Wu| 76 | 34 | 89 | +-------------+--------+--------+--------+ 3 Zeilen im Satz (0,00 Sek.) 3 Fügen Sie eine Gesamtspalte hinzu Nachdem wir die grundlegende Zeilen-zu-Spalten-Konvertierung durchgeführt haben, müssen wir der konvertierten Tabelle nun ein Gesamtfeld hinzufügen. Wir können dieses Feld folgendermaßen hinzufügen, d. h. wenn wir mit dem Zählen beginnen, zählen wir auch den Score-Wert, und zwar wie folgt: mysql-yeyz 14:18:06>>SELECT Benutzername, -> (CASE Kurs WENN 'Mathematik' DANN Punktzahl SONST ENDE ) Mathematik, -> (CASE Kurs WENN 'Chinesisch' DANN Punktzahl SONST ENDE ) Chinesisch, -> (CASE Kurs WENN 'Englisch' DANN Punktzahl SONST ENDE ) Englisch, -> (Punktzahl) gesamt -> VON test_tbl; +-----------+--------+--------+--------+-----------+ | Benutzername | Mathematik| Chinesisch| Englisch| gesamt | +-----------+--------+--------+--------+-----------+ | Zhang San | 34 | 0 | 0 | 34 | | Zhang San | 0 | 58 | 0 | 58 | | Zhang San | 0 | 0 | 58 | 58 | | 0 | 0 | 45 | | 0 | 87 | 0 | 87 | | 0 | 0 | 45 | 45 | | Wang Wu | 76 | 0 | 0 | 76 | | Wang Wu| 0 | 34 | 0 | 34 | | Wang Wu| 0 | 0 | 89 | 89 | +-----------+--------+--------+--------+-----------+ 9 Zeilen im Satz (0,00 Sek.) Die obigen Ergebnisse sind nicht aggregiert. Es ist zu beachten, dass, wenn wir aggregieren möchten, die ersten drei Spalten die Summen- oder Max-Methode verwenden können und die letzte Spalte die Summenmethode verwenden muss, da wir die Gesamtpunktzahl benötigen und die Verwendung der Max-Methode dazu führt, dass der Wert der Wert mit der höchsten Punktzahl wird. Das endgültige SQL lautet wie folgt: mysql-yeyz 14:18:29>>SELECT Benutzername, -> Summe (Fall Kurs, wenn 'Kurs', dann Punktzahl, sonst Ende) Mathematik, -> Summe (Fall Kurs, wenn 'Chinesisch', dann Punktzahl, sonst Ende) Chinesisch, -> Summe (Fall Kurs, wenn 'Englisch', dann Punktzahl, sonst Ende) Englisch, -> Summe(Punktzahl) Gesamt -> VON test_tbl -> GRUPPE NACH BENUTZERNAME; +-----------+--------+--------+--------+-----------+ | Benutzername | Mathematik| Chinesisch| Englisch| gesamt | +-----------+--------+--------+--------+-----------+ | Zhang San | 34 | 58 | 58 | 150 | | 45 | 87 | 45 | 177 | | Wang Wu | 76 | 34 | 89 | 199 | +-----------+--------+--------+--------+-----------+ 3 Zeilen im Satz (0,00 Sek.) 4 Einfache Methode group_concat Wenn wir es mit dem Anzeigeformat der Ergebnisse nicht so genau nehmen, können wir auch eine grobe Methode verwenden, nämlich die Funktion group_concat, um alle Spalten zusammenzuschreiben und sie in einem Feld darzustellen. Der Effekt ist wie folgt: mysql-yeyz 14:19:13>>SELECT Benutzername, GROUP_CONCAT(`Kurs`,":",Punktzahl)AS Punktzahl FROM test_tbl GROUP BY Benutzername; +--------------+------------------+ | Benutzername | Noten | +--------------+------------------+ | Zhang San | Mathematik: 34, Chinesisch: 58, Englisch: 58 | | Li Si | Mathematik: 45, Chinesisch: 87, Englisch: 45 | | Wang Wu | Mathematik: 76, Chinesisch: 34, Englisch: 89 | +--------------+------------------+ 3 Zeilen im Satz (0,00 Sek.) Diese Methode entspricht der direkten Gruppierung der Originaltabelle und kann auch mit bestimmten Anwendungsszenarien umgehen. Oben finden Sie den detaillierten Inhalt der Methode zum Konvertieren von Zeilen in Spalten in MySQL. Weitere Informationen zur Konvertierung von MySQL-Zeilen in Spalten finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
Wie können Sie in MySQL die Berechtigungen anzeig...
In Webprojekten nutzen wir häufig die Zeitleisten...
Inhaltsverzeichnis Vorwort Hallo Welt Bild Rahmen...
Das Herunterladen dieser Datenbank nimmt viel Zei...
Inhaltsverzeichnis 1. Grundlegender Überblick übe...
Inhaltsverzeichnis 1. CDN-Einführung 1.1 reagiere...
Da ich immer vscode zur Entwicklung von Front-End...
Zweimal Ihr MySQL-Passwort vergessen? Zuerst habe...
1. Übersicht In diesem Artikel wird das DOCTYPE-E...
Laden Sie zuerst JDK herunter. Hier verwenden wir...
In diesem Artikel werden die Installations- und K...
dl: Definitionsliste Definitionsliste dt: Definiti...
MySQL-Version: MySQL Community Edition (GPL) ----...
1. Vektorkarte Vektorgrafiken verwenden gerade Li...
Während des Entwicklungs- und Debugging-Prozesses...