Usando MySQL, puedo hacer algo como:
SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;Mi salida:
shopping
fishing
coding
pero en cambio solo quiero 1 fila, 1 col:
Rendimiento esperado:
shopping, fishing, codingLa razón es que selecciono varios valores de varias tablas y, después de todas las uniones, tengo muchas más filas de las que quisiera.
He buscado una función en MySQL Doc y no se parece a la CONCATo CONCAT_WSlas funciones de aceptar conjuntos de resultados.
Entonces, ¿alguien aquí sabe cómo hacer esto?
                    
                        mysql
                                sql
                                concat
                                group-concat
                                
                    
                    
                        Dean Rather
fuente
                
                fuente

Respuestas:
Puedes usar
GROUP_CONCAT:Como dijo Ludwig en su comentario, puede agregar el
DISTINCToperador para evitar duplicados:Como Jan declaró en su comentario, también puede ordenar los valores antes de implosionarlos usando
ORDER BY:Como dijo Dag en su comentario, hay un límite de 1024 bytes en el resultado. Para resolver esto, ejecute esta consulta antes de su consulta:
Por supuesto, puede cambiar
2048según sus necesidades. Para calcular y asignar el valor:fuente
DISTINCTparámetro, no obtendrá ningún doble.... GROUP_CONCAT(DISTINCT hobbies)SELECT person_id, GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ') FROM peoples_hobbies GROUP BY person_idEche un vistazo a
GROUP_CONCATsi su versión de MySQL (4.1) lo admite. Consulte la documentación para más detalles.Se vería algo así como:
fuente
group by 'all'no es necesario (además no deseado), porque esto asigna a todas las filas una cadenaally luego compara cadenas entre estas filas. Estoy en lo cierto?Sintaxis alternativa para concatenar múltiples filas individuales
ADVERTENCIA: Esta publicación te dará hambre.
Dado:
Me encontré con ganas de seleccionar múltiples filas individuales, en lugar de un grupo, y concatenar en un determinado campo.
Digamos que tiene una tabla de identificadores de productos y sus nombres y precios:
Luego, tienes un ajax sofisticado que enumera a estos cachorros como casillas de verificación.
Tu usuario de hipopótamo hambriento selecciona
13, 15, 16. No hay postre para ella hoy ...Encontrar:
Una forma de resumir el pedido de su usuario en una línea, con mysql puro.
Solución:
Usar
GROUP_CONCATcon laINcláusula :Qué salidas:
Solución de bonificación:
Si también desea el precio total, agregue
SUM():PD: Disculpas si no tienes un In-N-Out cerca ...
fuente
Puede cambiar la longitud máxima del
GROUP_CONCATvalor configurando elgroup_concat_max_lenparámetro.Ver detalles en la documentación de MySQL .
fuente
Hay una función GRUPO Agregado, GROUP_CONCAT .
fuente
En mi caso, tenía una fila de ID, y era necesario convertirlo en char, de lo contrario, el resultado se codificó en formato binario:
fuente
CASTtener valores como[BLOB - 14 Bytes]en el resultado!Utilice la variable de sesión MySQL (5.6.13) y el operador de asignación como el siguiente
entonces puedes conseguir
fuente
SELECT @logmsg := CONCAT_ws(',',@logmsg,description) from testTuve una consulta más complicada y descubrí que tenía que usarla
GROUP_CONCATen una consulta externa para que funcionara:Consulta original:
Imploded:
Espero que esto pueda ayudar a alguien.
fuente
Para alguien que mira aquí cómo usar
GROUP_CONCATcon subconsulta: publicar este ejemploPor
GROUP_CONCATlo tanto, debe usarse dentro de la subconsulta, no envolviéndola.fuente
Prueba esto:
fuente
tenemos dos formas de concatenar columnas en MySql
O
fuente