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.>