¿Cómo agrupar por un campo y devolver la lista de otro campo?

Tengo una tabla con ID de columnas, usuario que quiero agrupar por ID de columna y mostrar una lista de usuarios (separados por comas) para cada ID.

En el resultado final necesito mostrar:

user joe - id 1
users jim, mark, john - id 2
user dave - id 3
....

Recibo el error "Violación de cardinalidad: la subconsulta 1242 devuelve más de 1 fila" si intento esto:

SELECT id, (SELECT distinct(user) FROM mytable b where a.id = b.id)
FROM mytable a
GROUP BY id

preguntado el 01 de julio de 12 a las 01:07

2 Respuestas

Dado que está utilizando MySQL, hay una función integrada para eso que es el GROUP_CONCAT función. Por ejemplo, tiene registros como este:

ID      User
1       Joe
2       Jim
2       Mark
2       John
3       Dave

Si intenta ejecutar esta consulta:

SELECT ID, GROUP_CONCAT(User) Users
FROM tableName
GROUP BY ID

entonces tendrás un resultado como este:

ID         Users
1          Joe
2          Jim, Mark, John
3          Dave

Respondido 30 Jul 15, 00:07

¡Perfecto! Gracias. He usado ese antes, simplemente no podía recordar nada. ¡Agregué un distintivo() dentro de group_concat() para obtener solo registros únicos! - uwe

Seleccioné la tuya como la respuesta correcta, Duskwuff también te ganó porque tenía una respuesta más corta (meta.stackexchange.com/questions/9731/…) Creo que comenzó antes y los ejemplos serán útiles para otros. Salud - uwe

Lo que estas buscando es el GROUP_CONCAT función agregada:

SELECT id, GROUP_CONCAT(user) FROM table GROUP BY id

Respondido 01 Jul 12, 01:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.