group_concat ejemplos sql mysql sql-order-by group-concat

ejemplos - mysql group_concat distinct



Ordenar en un MySQL GROUP_CONCAT con una función en él (6)

Quiero ordenar los resultados en una función GROUP_CONCAT. El problema es que la selección en la función GROUP_CONCAT es otra función, como esta (selección de fantasía):

SELECT a.name, GROUP_CONCAT(DISTINCT CONCAT_WS('':'', b.id, c.name) ORDER BY b.id ASC) AS course FROM people a, stuff b, courses c GROUP BY a.id

Quiero obtener un resultado como (ordenado por b.id):

michael 1:science,2:maths,3:physics

pero me sale

michael 2:maths,1:science,3:physics

¿Alguien sabe cómo puedo ordenar por b.id en mi group_concat aquí?


No conozco una forma estándar de hacer esto. Esta consulta funciona, pero me temo que solo depende de algunos detalles de la implementación:

SELECT a_name, group_concat(b_id) FROM ( SELECT a.name AS a_name, b.id AS b_id FROM tbl1 a, tbl2 b ORDER BY a.name, b.id) a GROUP BY a_name


No hay necesidad de subseleccionar.

SELECT people.name, CONCAT_WS(":", stuff.id, courses.name) data FROM people, stuff, courses ORDER BY stuff.id, people.name


Sé que esto es muy viejo, pero justo ahora estaba buscando una respuesta y la respuesta de @korny me dio la idea de esto:

SELECT a.name, GROUP_CONCAT(DISTINCT CONCAT_WS('':'', b.id, c.name) ORDER BY CONCAT_WS('':'', b.id, c.name) ASC) AS course FROM people a, stuff b, courses c GROUP BY a.id

(Y funciona para mí, si eso no estuviera claro :-))



SELECT generated.name, GROUP_CONCAT(generated.data) FROM ( SELECT people.name, CONCAST_WS(":", stuff.id, courses.name) data FROM people, stuff, courses ORDER BY stuff.id, people.name ) generated GROUP BY generated.name


SELECT pub_id,GROUP_CONCAT(DISTINCT cate_id) FROM book_mast GROUP BY pub_id ORDER BY GROUP_CONCAT(DISTINCT cate_id) ASC;