mysql | Función Group_CONCAT()

La función GROUP_CONCAT() en MySQL se usa para concatenar datos de varias filas en un campo. Esta es una función agregada (GROUP BY) que devuelve un valor de string , si el grupo contiene al menos un valor no NULL . De lo contrario, devuelve NULL .

Sintaxis:

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


col1, col2, ...colN : These are the column names of table.
col_name1: Column of the table whose values are concatenated into a single field for each group.
table_name: Name of table.
col_name2: Column of the table according to which grouping is done.

Uso de varias cláusulas dentro de la función GROUP_CONCAT():

  • Distinto: Elimina la repetición de valores del resultado.
  • Ordenar por: ordena los valores del grupo en un orden específico y luego los concatena.
  • Separador: por defecto, los valores del grupo están separados por el operador ( , ). Para cambiar este valor de separador, se usa la cláusula Separator seguida de un literal de string. Se da como Separador ‘str_value’ .

Ejemplos:

Consideremos una tabla de «Empleados»:

emp_id fnombre nombre id_depto fuerza
1 mukesh gupta 2 Liderazgo
3 Neelam Sharma 3 Trabajo duro
1 mukesh gupta 2 Responsable
2 devesh tyagi 2 Puntualidad
3 Neelam Sharma 3 Auto motivado
1 mukesh gupta 2 Aprende rápido
4 keshav singular 3 Escuchando
2 devesh tyagi 2 Aprende rápido
5 tania jainista 1 Trabajo duro
4 keshav singular 3 Pensamiento crítico
5 tania jainista 1 Orientado a objetivos

Consultas:

1. Usando la función GROUP_CONCAT() simple-

SELECT emp_id, fname, lname, dept_id, 
GROUP_CONCAT ( strength ) as "strengths" 
FROM employee group by emp_id;

Producción:

emp_id fnombre nombre id_depto fortalezas
1 mukesh gupta 2 Liderazgo, Responsable, Aprende rápido
2 devesh tyagi 2 Puntualidad, Rapidez de aprendizaje
3 Neelam Sharma 3 Trabajador, Auto-motivado
4 keshav singular 3 Escuchar, Pensamiento crítico
5 tania jainista 1 Trabajador, Orientado a objetivos

2. Usando una cláusula DISTINCT-

SELECT dept_id, 
GROUP_CONCAT ( DISTINCT strength) 
as "employees strengths"  
from employee group by dept_id;

Producción:

id_depto fortalezas de los empleados
1 Orientado a objetivos, Trabajador
2 Liderazgo, puntualidad, rápido aprendizaje, responsable
3 Pensamiento crítico, Trabajo duro, Escuchar, Automotivado

3. Uso de la cláusula ORDER BY:

SELECT dept_id, 
GROUP_CONCAT ( DISTINCT emp_id ORDER BY emp_id  SEPARATOR', ') 
as "employees ids" 
from employee group by dept_id;

Aquí, Separator ‘, ‘ separará los valores por una coma ( , ) y un carácter de espacio en blanco.

Producción:

id_depto identificaciones de empleados
1 5
2 1, 2
3 3, 4

Cómo concatenar varias filas de diferentes columnas en un solo campo.
Hasta ahora hemos visto el uso de la función GROUP_CONCAT() para agrupar los valores de varias filas que pertenecen a la misma columna. Pero, usando la función concat() y la función group_concat() juntas, podemos combinar más de un valor de columna de diferentes filas en un solo campo.

Ejemplo:
considerando la tabla anterior «empleado», si deseamos encontrar la fuerza de los empleados junto con la identificación de los empleados en la segunda consulta, entonces se escribe como-

SELECT dept_id, GROUP_CONCAT ( strengths SEPARATOR '  ') as "emp-id : strengths"
FROM ( SELECT dept_id, CONCAT ( emp_id, ':', GROUP_CONCATt(strength SEPARATOR', ') )
as "strengths" FROM employee GROUP BYy emp_id )as emp GROUP BY dept_id;

Explicación:
La consulta anterior consta de dos sentencias SELECT, una interna y otra externa.

La instrucción SELECT interna:

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

Agrupará las filas de la tabla de empleados según «emp_id». La primera columna resultante muestra dept_id, la segunda columna muestra emp_id junto con su lista de fortalezas.

Salida para la instrucción SELECT interna-

id_depto fortalezas
2 1: Liderazgo, Responsable, Aprende rápido
2 2: puntualidad, aprendizaje rápido
3 3: trabajador, automotivado
3 4: Escuchar, Pensamiento crítico
1 5: trabajador, orientado a objetivos

La instrucción SELECT externa ahora agrupará estas filas de acuerdo con «dept_id».

Producción:

id_depto emp-id: puntos fuertes
1 5: trabajador, orientado a objetivos
2 1: Liderazgo, Responsable, Aprendizaje rápido 2: Puntualidad, Aprendizaje rápido
3 3: trabajador, automotivado 4: escucha, pensamiento crítico

Nota: El resultado de la función GROUP_CONCAT() se trunca a la longitud máxima, es decir , 1024 , que proporciona la variable del sistema group_concat_max_len . Sin embargo, el valor de la variable group_concat_max_len se puede cambiar en tiempo de ejecución usando el comando SET como-

SET [GLOBAL | SESSION] group_concat_max_len = value;

value: It is the new value set to the variable.

Publicación traducida automáticamente

Artículo escrito por Tanvi_Garg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *