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