web-dev-qa-db-fra.com

Comment utiliser GROUP BY pour concaténer des chaînes dans MySQL?

Fondamentalement, la question est de savoir comment obtenir ceci:

 foo_id foo_name 
 1 A 
 1 B 
 2 C 

pour ça:

 foo_id foo_name 
 1 A B 
 2 C 
325
Paweł Hajdan
SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

A partir du lien ci-dessus, GROUP_CONCAT: Cette fonction renvoie un résultat sous forme de chaîne avec les valeurs non NULL concaténées d'un groupe. Il renvoie NULL s'il n'y a pas de valeur non NULL.

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

Plus de détails ici .

A partir du lien ci-dessus, GROUP_CONCAT: Cette fonction renvoie un résultat sous forme de chaîne avec les valeurs non NULL concaténées d'un groupe. Il renvoie NULL s'il n'y a pas de valeur non NULL.

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

Vous donnera une chaîne délimitée par des virgules

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

: - Dans MySQL, vous pouvez obtenir les valeurs concaténées des combinaisons d’expressions. Pour éliminer les valeurs en double, utilisez la clause DISTINCT. Pour trier les valeurs dans le résultat, utilisez la clause ORDER BY. Pour trier dans ordre inverse , ajoutez le DESC (décroissant) mot-clé correspondant au nom de la colonne que vous triez dans la clause ORDER BY. La valeur par défaut est l'ordre croissant. cela peut être spécifié explicitement à l'aide du mot clé ASC. Le séparateur par défaut entre les valeurs d'un groupe est la virgule (“,”). Pour spécifier explicitement un séparateur, utilisez SEPARATOR suivi de la valeur littérale de chaîne à insérer entre les valeurs de groupe. Pour éliminer complètement le séparateur, spécifiez SEPARATOR '').

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

OR

mysql> SELECT student_name,
    ->     GROUP_CONCAT(DISTINCT test_score
    ->               ORDER BY test_score DESC SEPARATOR ' ')
    ->     FROM student
    ->     GROUP BY student_name;
15
Exundoz
SET group_concat_max_len=100000000
13
Waqar Alamgir

Grandes réponses. J'ai également eu un problème avec NULLS et j'ai réussi à le résoudre en incluant un COALESCE à l'intérieur de GROUP_CONCAT. Exemple comme suit:

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

J'espère que ceci aide quelqu'un d'autre

11
Mauricio Alo