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, coding
La 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 CONCAT
o CONCAT_WS
las 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
DISTINCT
operador 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
2048
según sus necesidades. Para calcular y asignar el valor:fuente
DISTINCT
pará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_id
Eche un vistazo a
GROUP_CONCAT
si 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 cadenaall
y 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_CONCAT
con laIN
clá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_CONCAT
valor configurando elgroup_concat_max_len
pará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
CAST
tener 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 test
Tuve una consulta más complicada y descubrí que tenía que usarla
GROUP_CONCAT
en 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_CONCAT
con subconsulta: publicar este ejemploPor
GROUP_CONCAT
lo tanto, debe usarse dentro de la subconsulta, no envolviéndola.fuente
Prueba esto:
fuente
tenemos dos formas de concatenar columnas en MySql
O
fuente