logo

MySQL | Group_CONCAT()-Funktion

Die Funktion GROUP_CONCAT() in MySQL wird verwendet, um Daten aus mehreren Zeilen in einem Feld zu verketten. Dies ist eine Aggregatfunktion (GROUP BY), die a zurückgibt Zeichenfolge Wert, wenn die Gruppe mindestens ein Nicht- NULL Wert. Andernfalls wird es zurückgegeben NULL .

Syntax:



Java-Main
SELECT col1, col2, ..., colN GROUP_CONCAT ( [DISTINCT] col_name1  [ORDER BY clause] [SEPARATOR str_val] )  FROM table_name GROUP BY col_name2;>

Parameter:

  • col1, col2, ...colN: Dies sind die Spaltennamen der Tabelle.
  • col_name1: Spalte der Tabelle, deren Werte für jede Gruppe in einem einzigen Feld verkettet werden.
  • Tabellenname: Name der Tabelle.
  • col_name2: Spalte der Tabelle, nach der gruppiert wird.

Verwendung verschiedener Klauseln im Inneren GROUP_CONCAT() Funktion

  • Unterscheidbar: Dadurch wird die Wiederholung von Werten aus dem Ergebnis ausgeschlossen.
  • Sortieren nach: Es sortiert die Werte der Gruppe in einer bestimmten Reihenfolge und verkettet sie dann.
  • Separator: Standardmäßig werden die Werte der Gruppe durch ( getrennt) , ) Operator. Um diesen Trennzeichenwert zu ändern, wird eine Trennklausel gefolgt von einem Zeichenfolgenliteral verwendet. Es wird angegeben als Trennzeichen „str_value“ .

Beispiele:

Betrachten wir eine Employee-Tabelle:



emp_id fname lname Abteilungs-ID Stärke
1 Mukesh Gupta 2 Führung
3 neelam Sharma 3 Hart arbeiten
1 Mukesh Gupta 2 Verantwortlich
2 Devesh Tyagi 2 Pünktlichkeit
3 neelam Sharma 3 Selbst motiviert
1 Mukesh Gupta 2 Schneller Lerner
4 Keshav singhal 3 Hören
2 Devesh Tyagi 2 Schneller Lerner
5 fragen jain 1 Hart arbeiten
4 Keshav singhal 3 Kritisches Denken
5 fragen jain 1 Zielorientiert

Abfrage

1. Verwenden der einfachen Funktion GROUP_CONCAT() –

SELECT emp_id, fname, lname, dept_id,  GROUP_CONCAT ( strength ) as 'strengths'  FROM employee  GROUP BY fname;>

Ausgabe

emp_id fname lname Abteilungs-ID Stärken
1 Mukesh Gupta 2 Führung, Verantwortungsbewusst, Schnelllerner
2 Devesh Tyagi 2 Pünktlichkeit, Schnelllerner
3 neelam Sharma 3 Fleißig, selbstmotiviert
4 Keshav singhal 3 Zuhören, kritisches Denken
5 fragen jain 1 Fleißig, zielorientiert

2. Verwendung einer DISTINCT-Klausel –

Abfrage

SELECT dept_id,  GROUP_CONCAT ( DISTINCT strength) as 'employees strengths'  FROM employee  GROUP BY dept_id;>

Ausgabe

Abteilungs-ID Stärken der Mitarbeiter
1 Zielorientiert, fleißig
2 Führung, Pünktlichkeit, schnelle Auffassungsgabe, Verantwortungsbewusstsein
3 Kritisches Denken, fleißig, zuhörend, selbstmotiviert

3. Verwendung der ORDER BY-Klausel –



Abfrage

SELECT dept_id,  GROUP_CONCAT ( DISTINCT emp_id ORDER BY emp_id SEPARATOR ', ') as 'employees ids'  FROM employee  GROUP BY dept_id;>

Hier, Trennzeichen ‘, ‘ trennt die Werte durch ein Komma ( , ) und ein Leerzeichen.

Ausgabe

Abteilungs-ID Mitarbeiter-IDs
1 5
2 1, 2
3 3. 4

Wie verkette ich mehrere Zeilen unterschiedlicher Spalten in einem einzigen Feld?

Bisher haben wir die Verwendung der Funktion GROUP_CONCAT() gesehen, um die Werte mehrerer Zeilen zu gruppieren, die zu derselben Spalte gehören. Aber mit concat() Wenn wir die Funktion und die Funktion group_concat() zusammen verwenden, können wir mehr als eine Spaltenwerte verschiedener Zeilen in einem einzigen Feld kombinieren.

Beispiel:
Wenn wir in der obigen Tabelle „Mitarbeiter“ die Stärke des Mitarbeiters zusammen mit der ID des Mitarbeiters in der zweiten Abfrage ermitteln möchten, wird dies wie folgt geschrieben:

SELECT dept_id, GROUP_CONCAT ( strengths SEPARATOR ' ') as 'emp-id : strengths' FROM (   SELECT dept_id, CONCAT ( emp_id, ':', GROUP_CONCAT(strength SEPARATOR', ') )   as 'strengths'   FROM employee   GROUP BY emp_id  ) as emp  GROUP BY dept_id;>

Erläuterung:
Die obige Abfrage besteht aus zwei SELECT-Anweisungen ein inneres und ein äußeres.

Die innere SELECT-Anweisung-

CSV-Datei in Java lesen

Abfrage

SELECT dept_id, concat ( emp_id, ':', GROUP_CONCAT ( strength separator ', ' ) ) as 'strengths'  FROM employee  GROUP BY dept_id, emp_id>

Die Zeilen der Mitarbeitertabelle werden nach emp_id gruppiert. Die erste Ergebnisspalte zeigt dept_id an, die zweite Spalte zeigt emp_id zusammen mit ihrer Stärkenliste.

Ausgabe für innere SELECT-Anweisung-

Abteilungs-ID Stärken
2 1: Führung, Verantwortungsbewusst, Schnelllerner
2 2: Pünktlichkeit, Schnelllerner
3 3: Fleißig, selbstmotiviert
3 4: Zuhören, kritisches Denken
1 5: Fleißig, zielorientiert

Die äußere SELECT-Anweisung gruppiert diese Zeilen nun nach dept_id.

Ausgabe

Abteilungs-ID emp-id: Stärken
1 5: Fleißig, zielorientiert
2 1: Führung, Verantwortungsbewusst, Schnelllerner 2: Pünktlichkeit, Schnelllerner
3 3: Fleißig, selbstmotiviert 4: Zuhören, kritisches Denken

Notiz: Das Ergebnis der Funktion GROUP_CONCAT() wird auf die maximale Länge gekürzt, d. h 1024 was durch die Systemvariable gegeben ist group_concat_max_len . Der Wert der Variablen group_concat_max_len kann jedoch zur Laufzeit mithilfe von geändert werden SATZ Befehl as-

SET [GLOBAL | SESSION] group_concat_max_len = value;   value:   It is the new value set to the variable.>