Hoe gebruik je GROUP BY om strings samen te voegen in MySQL?

De vraag is eigenlijk hoe je hieruit kunt komen:

foo_id foo_name
1 A
1 B
2 C

naar dit:

foo_id foo_name
1 A B
2 C

Antwoord 1, autoriteit 100%

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

Van de bovenstaande link, GROUP_CONCAT: deze functie retourneert een tekenreeksresultaat met de aaneengeschakelde niet-NULL-waarden van een groep. Het geeft NULL terug als er geen niet-NULL-waarden zijn.


Antwoord 2, autoriteit 27%

SELECT id, GROUP_CONCAT( string SEPARATOR ' ') FROM table GROUP BY id

Meer details hier.

Van de bovenstaande link, GROUP_CONCAT: deze functie retourneert een tekenreeksresultaat met de aaneengeschakelde niet-NULL-waarden van een groep. Het geeft NULL terug als er geen niet-NULL-waarden zijn.


Antwoord 3, autoriteit 3%

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

Geeft u een door komma’s gescheiden tekenreeks


Antwoord 4, autoriteit 3%

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

:-
In MySQL kunt u de aaneengeschakelde waarden van uitdrukkingscombinaties krijgen
. Gebruik de DISTINCT-clausule om dubbele waarden te elimineren. Gebruik de ORDER BY-component om waarden in het resultaat te sorteren. Om in omgekeerde volgordete sorteren, voegt u het trefwoord DESC(aflopend) toe aan de naam van de kolom waarop u sorteert in de ORDER BY-clausule. De standaard is oplopende volgorde; dit kan expliciet worden gespecificeerd met behulp van het ASC-sleutelwoord. Het standaardscheidingsteken tussen waarden in een groep is een komma (“,”). Om expliciet een scheidingsteken op te geven, gebruikt u SEPARATOR gevolgd door de letterlijke tekenreekswaarde die tussen groepswaarden moet worden ingevoegd. Om het scheidingsteken helemaal te verwijderen, specificeert u SEPARATOR ”.

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

OF

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

Antwoord 5, autoriteit 3%

Het resultaat wordt afgekapt tot de maximale lengte die wordt gegeven door de group_concat_max_len systeemvariabele, die een standaardwaarde heeft van 1024 tekens, dus we doen eerst:

SET group_concat_max_len=100000000;

en dan, bijvoorbeeld:

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

Antwoord 6, autoriteit 2%

Geweldige antwoorden.
Ik had ook een probleem met NULLS en heb het kunnen oplossen door een COALESCE in de GROUP_CONCAT op te nemen. Voorbeeld als volgt:

SELECT id, GROUP_CONCAT(COALESCE(name,'') SEPARATOR ' ') 
FROM table 
GROUP BY id;

Hopelijk helpt dit iemand anders

Other episodes