MySQL-Gruppenkonkat für Strings

Mysql Group Concat Strings



Die GROUP _CONCAT-Funktion ist eine GROUP BY-Aggregatfunktion, mit der Sie Spaltenwerte aus mehreren Zeilen in einem einzigen Feld verketten können. Sie gibt einen String zurück, wenn die Set-Gruppe einen oder keinen Null-Spaltenwert enthält, und gibt einen NULL-Wert zurück, wenn keiner gefunden werden kann.

In diesem Tutorial erfahren Sie, wie Sie die MySQL-Funktion GROUP_CONCAT() verwenden, um Strings aus einer Gruppe mit mehreren Optionen zu kombinieren.







Grundlegende Verwendung

Wie bereits erwähnt, gibt diese Funktion ein Zeichenfolgenergebnis mit den Werten der verketteten Nicht-Null-Werte oder eine NULL zurück, wenn keine vorhanden ist.



Die allgemeine Syntax lautet:



GROUP_CONCAT ([ UNTERSCHEIDBAR ]ausdruck[,ausdruck ...]
[ SORTIEREN NACH ausdruck
[ ASC | DESC ] [,spaltenname ...]]
[SEPARATOR str_val])

Erläuterung

Aus der obigen Syntax können Sie sehen, dass die GROUP_CONCAT-Funktion MySQL-Klauseln und -Einschränkungen verwendet, um die verschiedenen Optionen anzugeben:





  1. UNTERSCHEIDBAR: Die DISTINCT-Klausel hilft dabei, die doppelten Werte in der Mengengruppe vor dem Verkettungsprozess zu entfernen. Sehen Sie sich unser Tutorial an, in dem MySQL DISTINCT erklärt wird, um zu verstehen, wie es funktioniert.
  2. SORTIEREN NACH: Die nächste Klausel ist die ORDER BY, die hilft, die Werte in einer bestimmten Reihenfolge zu sortieren. Die Reihenfolge kann entweder aufsteigend oder absteigend sein. Wenn keine Reihenfolge angegeben ist, formatiert MySQL die Werte in aufsteigender Reihenfolge.
  3. SEPARATOR : Diese Klausel legt das Zeichenfolgenliteral fest, das beim Verkettungsprozess zwischen den Werten der Gruppe eingefügt wird. MySQL verwendet standardmäßig ein Komma (,), um die Werte zu trennen.

HINWEIS: Das von der MySQL-Funktion GROUP_CONCAT() generierte String-Ergebnis ist auf eine Länge begrenzt, die dem Wert entspricht, der in der Variablen group_concat_max_len festgelegt ist. Dieser Wert ist im System definiert und hat einen Standardwert von 1024. Sie können diesen Wert global ändern oder in der gewünschten Sitzung einstellen.

EINSTELLEN [ GLOBAL | SITZUNG ]group_concat_max_len= Wert ;

Beachten Sie die folgende Referenz, um mehr zu erfahren:



https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len

So funktioniert es: Beispiel

Lassen Sie mich anhand eines einfachen Beispiels erklären, wie die Funktion GROUP_CONCAT() funktioniert. Betrachten Sie die Tabelle mit einem Feld für CHAR als:

SCHAFFEN TISCH concat ( Wert VERKOHLEN );

Lassen Sie uns Werte in die Tabelle einfügen, wie in der folgenden Abfrage gezeigt:

EINFÜGUNG HINEIN concat ( Wert ) WERTE ('H'),('UND'),('DAS'),('DAS'),('ODER');

Wenn wir eine grundlegende GROUP_CONCAT-Operation für die Werte in der Tabelle ausführen, erhalten wir ein String-Ergebnis wie unten gezeigt:

AUSWÄHLEN GROUP_CONCAT ( UNTERSCHEIDBAR Wert SORTIEREN NACH Wert ASC SEPARATOR'') VON concat ;

Der resultierende Wert ist:

+ ------------------------------------------------- -------------- +
| GROUP_CONCAT ( UNTERSCHEIDBAR Wert SORTIEREN NACH Wert ASC SEPARATOR'') |
+ ------------------------------------------------- -------------- +
|E H L O|
+ ------------------------------------------------- -------------- +
1Reihe in einstellen (0,01Sek)

Möchten Sie auf andere Weise verstehen, was mit dem oben angegebenen Ergebnis passiert ist?

Wir beginnen damit, alle doppelten Werte aufgrund der MySQL DISTINCT-Klausel zu entfernen, die ein L entfernt.

Als nächstes fahren wir mit ORDER BY aufsteigender Reihenfolge wie in (ASC) definiert fort, was den String in der Form von . ändert

HELO->EHLO

Schließlich führen wir den Verkettungsprozess mit einem Leerzeichen als Trennzeichen für die eingestellten Werte durch, was zu der Zeichenfolge E H L O aus {H, E, L, L O} führt.

Beispielanwendungsfälle

Nehmen wir eine reale Datenbank und verwenden sie, um zu veranschaulichen, wie wir die Funktion GROUP_CONCAT() implementieren können. In diesem Beispiel verwenden wir die Sakila-Datenbank und insbesondere die Adressentabelle aus der Sakila-Datenbank.

Betrachten Sie die folgende Ressource, um die Datenbank für Ihre Beispiele herunterzuladen:

https://dev.mysql.com/doc/index-other.html

In der Adresstabelle der Sakila-Datenbank finden Sie die Bezirksspalte. Wir können alle eindeutigen Bezirke, die durch eine Pipe getrennt sind, abrufen, wie in der folgenden Abfrage gezeigt:

AUSWÄHLEN GROUP_CONCAT ( UNTERSCHEIDBAR Kreis SORTIEREN NACH Bezirk SEPARATOR'|') VON sakila.adresse GRENZE 5;

Die obige Abfrage zeigt alle EINZELNEN Bezirke an und ordnet sie in aufsteigender Reihenfolge, getrennt durch einen Pipe.

HINWEIS: Die Funktion GROUP_CONCAT() ist eine Aggregatfunktion. Daher ist es erforderlich, dass Sie die ORDER BY-Anweisung innerhalb der Funktion und nicht in der SELECT-Anweisung angeben.

Abschluss

Die in diesem Tutorial beschriebene MySQL-Funktion GROUP_CONCAT() ist eine nützliche Funktion, mit der Sie eindeutige, sortierte und organisierte Daten aus einer Tabelle erstellen können, die Duplikate und ungeordnete Daten enthalten kann.

Betrachten Sie die Dokumentation oder unsere anderen MySQL-Tutorials, um mehr zu erfahren.