453 Stimmen

Wie verwendet man GROUP BY, um Zeichenketten in MySQL zu verketten?

Im Grunde genommen stellt sich die Frage, wie man aus dieser Situation herauskommt:

foo\_id   foo\_name
1        A
1        B
2        C

dazu:

foo\_id   foo\_name
1        A B
2        C

3 Stimmen

@barlop hat das durch Bearbeiten der Fragen und Antworten behoben.

673voto

Scott Noyes Punkte 6194
SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;

https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_group-concat

Aus dem obigen Link, GROUP_CONCAT : Diese Funktion liefert ein String-Ergebnis mit den verketteten Nicht-NULL-Werten einer Gruppe. Sie gibt NULL zurück, wenn es keine Nicht-NULL-Werte gibt.

0 Stimmen

Ich danke Ihnen! Das hat mir so viel Zeit gespart, danke!

171voto

Graeme Perrow Punkte 53901
SELECT id, GROUP_CONCAT( string SEPARATOR ' ') FROM table GROUP BY id

Mehr Details aquí .

Aus dem obigen Link, GROUP_CONCAT : Diese Funktion liefert ein String-Ergebnis mit den verketteten Nicht-NULL-Werten einer Gruppe. Sie gibt NULL zurück, wenn es keine Nicht-NULL-Werte gibt.

0 Stimmen

Hat die resultierende Spalte eine Grenze in Zeichen. siehe aquí und die Dokumente :)

23voto

Exundoz Punkte 191
SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;

:- In MySQL können Sie die verketteten Werte von Ausdruckskombinationen erhalten . Um doppelte Werte zu eliminieren, verwenden Sie die DISTINCT Klausel. Um die Werte im Ergebnis zu sortieren, verwenden Sie die ORDER BY-Klausel. Zum Sortieren in umgekehrte Reihenfolge fügen Sie die DESC (absteigend) an den Namen der Spalte, nach der Sie in der ORDER BY-Klausel sortieren wollen. Die Standardeinstellung ist aufsteigende Reihenfolge; diese kann explizit mit dem Schlüsselwort ASC angegeben werden. Das Standardtrennzeichen zwischen den Werten in einer Gruppe ist ein Komma (","). Um ein Trennzeichen explizit anzugeben, verwenden Sie SEPARATOR, gefolgt von dem Zeichenfolgenliteral, das zwischen den Gruppenwerten eingefügt werden soll. Um das Trennzeichen ganz zu eliminieren, geben Sie SEPARATOR '' .

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

O

mysql> SELECT student_name,
    ->     GROUP_CONCAT(DISTINCT test_score
    ->               ORDER BY test_score DESC SEPARATOR ' ')
    ->     FROM student
    ->     GROUP BY student_name;

21voto

Waqar Alamgir Punkte 9250

Das Ergebnis wird auf die maximale Länge gekürzt, die durch die Systemvariable group_concat_max_len vorgegeben ist, die einen Standardwert von 1024 Zeichen hat, also tun wir das zuerst:

SET group_concat_max_len=100000000;

und dann zum Beispiel:

SELECT pub_id,GROUP_CONCAT(cate_id SEPARATOR ' ') FROM book_mast GROUP BY pub_id

1 Stimmen

Das Ergebnis wird auf die maximale Länge gekürzt, die durch die Systemvariable group_concat_max_len vorgegeben ist, die den Wert Standardwert de 1024 Zeichen. docs

0 Stimmen

Was ist der Anwendungsbereich dieser group_concat_max_len Konfiguration? Aktuelle Verbindung/Sitzung, oder werden andere Clients davon betroffen sein?

0 Stimmen

@FrozenFlame: > Wenn kein Modifikator vorhanden ist, ändert SET die Sitzungsvariable. Wenn die Variable keinen Sitzungswert hat, tritt ein Fehler auf. Von dev.mysql.com/doc/refman/5.7/de/verwendende-system-variablen.html

20voto

Wayne Punkte 36217
SELECT id, GROUP_CONCAT(CAST(name as CHAR)) FROM table GROUP BY id

Gibt eine durch Komma getrennte Zeichenfolge aus

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X