logo

MySQL | Fonction Group_CONCAT()

La fonction GROUP_CONCAT() de MySQL est utilisée pour concaténer les données de plusieurs lignes en un seul champ. Il s'agit d'une fonction d'agrégation (GROUP BY) qui renvoie un Chaîne valeur si le groupe contient au moins un non- NUL valeur. Sinon, ça revient NUL .

Syntaxe:

SELECT col1, col2, ..., colN GROUP_CONCAT ( [DISTINCT] col_name1  [ORDER BY clause] [SEPARATOR str_val] )  FROM table_name GROUP BY col_name2;>

Paramètres:



  • col1, col2, ...colN : Ce sont les noms de colonnes du tableau.
  • nom_col1 : Colonne du tableau dont les valeurs sont concaténées en un seul champ pour chaque groupe.
  • nom de la table: Nom du tableau.
  • nom_col2 : Colonne du tableau selon laquelle le regroupement est effectué.

Utilisation de diverses clauses à l'intérieur GROUP_CONCAT() fonction

  • Distinct: Il élimine la répétition des valeurs du résultat.
  • Commandé par: Il trie les valeurs du groupe dans un ordre spécifique puis les concatène.
  • Séparateur: Par défaut, les valeurs du groupe sont séparées par le ( , ) opérateur. Afin de modifier cette valeur de séparateur, une clause Separator est utilisée suivie d'une chaîne littérale. Il est donné comme Séparateur 'str_value' .

Exemples:

Considérons une table Employee :

emp_id nom de famille Nom id_dept force
1 mukesh gupta 2 Direction
3 Neelam Sharma 3 Travailler dur
1 mukesh gupta 2 Responsable
2 Devesh Tyagi 2 Ponctualité
3 Neelam Sharma 3 Motivé
1 mukesh gupta 2 Apprentissage rapide
4 kechav célibataire 3 Écoute
2 Devesh Tyagi 2 Apprentissage rapide
5 demander jaïn 1 Travailler dur
4 kechav célibataire 3 Esprit critique
5 demander jaïn 1 Orienté vers un objectif

Requête

1. Utilisation de la simple fonction GROUP_CONCAT() –

SELECT emp_id, fname, lname, dept_id,  GROUP_CONCAT ( strength ) as 'strengths'  FROM employee  GROUP BY fname;>

Sortir

emp_id nom de famille Nom id_dept forces
1 mukesh gupta 2 Leadership, responsable, apprenant vite
2 Devesh Tyagi 2 Ponctualité, apprentissage rapide
3 Neelam Sharma 3 Travailleur acharné, motivé
4 kechav célibataire 3 Ecoute, Esprit critique
5 demander jaïn 1 Travailleur acharné, axé sur les objectifs

2. Utiliser une clause DISTINCT –

Requête

SELECT dept_id,  GROUP_CONCAT ( DISTINCT strength) as 'employees strengths'  FROM employee  GROUP BY dept_id;>

Sortir

id_dept les points forts des employés
1 Axé sur les objectifs, travailleur
2 Leadership, Ponctualité, Apprentissage rapide, Responsable
3 Esprit critique, Travailleur, Ecoute, Motivé

3. Utilisation de la clause ORDER BY –

Requête

SELECT dept_id,  GROUP_CONCAT ( DISTINCT emp_id ORDER BY emp_id SEPARATOR ', ') as 'employees ids'  FROM employee  GROUP BY dept_id;>

Ici, Séparateur ', ' séparera les valeurs par une virgule ( , ) et un caractère d'espacement.

Sortir

id_dept identifiants des employés
1 5
2 1, 2
3 3.4

Comment concaténer plusieurs lignes de colonnes différentes dans un seul champ ?

Jusqu'à présent, nous avons vu l'utilisation de la fonction GROUP_CONCAT() pour regrouper les valeurs de plusieurs lignes appartenant à la même colonne. Mais, en utilisant concat () function et group_concat() fonctionnent ensemble, nous pouvons combiner plusieurs valeurs de colonne de différentes lignes en un seul champ.

Exemple:
En considérant les employés du tableau ci-dessus, si nous souhaitons trouver la force des employés ainsi que leur identifiant dans la deuxième requête, alors cela s'écrit comme suit :

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

Explication:
La requête ci-dessus se compose de deux Instructions SELECT un intérieur et un extérieur.

L'instruction SELECT interne-

Requête

SELECT dept_id, concat ( emp_id, ':', GROUP_CONCAT ( strength separator ', ' ) ) as 'strengths'  FROM employee  GROUP BY dept_id, emp_id>

Il regroupera les lignes de la table des employés selon emp_id. La première colonne résultante affiche dept_id, la deuxième colonne affiche emp_id ainsi que la liste de leurs points forts.

Sortir pour l'instruction SELECT interne-

id_dept forces
2 1 : Leadership, Responsable, Apprentissage rapide
2 2 : Ponctualité, apprentissage rapide
3 3 : Travailleur acharné, motivé
3 4 : Ecoute, Pensée critique
1 5 : Travailleur acharné, axé sur les objectifs

L'instruction SELECT externe regroupera désormais ces lignes en fonction de dept_id.

Sortir

id_dept emp-id : points forts
1 5 : Travailleur acharné, axé sur les objectifs
2 1 : Leadership, Responsable, Apprentissage rapide 2 : Ponctualité, Apprentissage rapide
3 3 : Travailleur acharné, motivé 4 : Écoute, esprit critique

Note: Le résultat de la fonction GROUP_CONCAT() est tronqué à la longueur maximale, c'est-à-dire 1024 qui est donné par la variable système group_concat_max_len . Cependant, la valeur de la variable group_concat_max_len peut être modifiée au moment de l'exécution en utilisant ENSEMBLE commande comme-

SET [GLOBAL | SESSION] group_concat_max_len = value;   value:   It is the new value set to the variable.>