GROUP_CONCAT / string_agg
GROUP_CONCAT assemble les valeurs d'un groupe en une seule chaîne séparée par un délimiteur. Pratique pour afficher la liste des élèves d'une classe ou des produits d'une commande sur une ligne.
- concaténer
- liste
- string_agg
- GROUP_CONCAT
- LISTAGG
Syntaxe
SELECT groupe, GROUP_CONCAT(col, ', ' ORDER BY col) AS listeFROM tableGROUP BY groupe;-- forme standard : string_agg(col, ', ' ORDER BY col)Exemple
SELECT c.name AS classe, GROUP_CONCAT(s.name, ', ' ORDER BY s.name) AS elevesFROM classes cJOIN students s ON s.class_id = c.idGROUP BY c.id, c.nameORDER BY c.name;-- Jeu de données : école-- Résultat attendu :-- 5ème A | Emma Blanc-- 6ème A | Alice Leroy, Bob Petit-- 6ème B | Clara Moreau, David RouxÀ retenir
- string_agg(col, sep) est le nom standard : accepté par SQLite 3.44+, PostgreSQL et SQL Server 2017+ (qui écrit WITHIN GROUP (ORDER BY col) pour le tri). MySQL utilise GROUP_CONCAT(col ORDER BY col SEPARATOR ', '), Oracle LISTAGG.
- Piège : sans ORDER BY dans l'agrégat, l'ordre des valeurs dans la chaîne est arbitraire et peut changer d'une exécution à l'autre. Le tri dans l'agrégat est accepté depuis SQLite 3.44.
- Piège : MySQL tronque silencieusement le résultat à 1 024 caractères par défaut (variable group_concat_max_len).
- Le séparateur par défaut est la virgule sans espace. GROUP_CONCAT(DISTINCT col) supprime les doublons, mais SQLite n'accepte alors pas de séparateur personnalisé.
Voir aussi
- COUNT & GROUP BYGROUP BY range les lignes en groupes selon une ou plusieurs colonnes, puis COUNT, SUM ou AVG calculent une valeur par groupe. On obtient un tableau de synthèse, une ligne par groupe.
- Agrégation conditionnellePlacer un CASE dans un agrégat permet de calculer plusieurs indicateurs en un seul passage, un par colonne. C'est la technique du tableau croisé : une ligne par client, une colonne par statut.
- Fonctions texteLes fonctions texte nettoient, découpent et assemblent les chaînes : mettre en majuscules, retirer des espaces, extraire un domaine d'e-mail. Indispensables avant de comparer ou de dédoublonner.