Você pode usar
GROUP_CONCAT
:SELECT person_id,
GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Como Ludwig afirmou em sua comentar, você pode adicionar o
DISTINCT
operador para evitar duplicatas:SELECT person_id,
GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Como Jan declarou em sua comentar, você também pode classificar os valores antes de implodir usando
ORDER BY
:SELECT person_id,
GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;
Como Dag afirmou em o comentário dele, há um limite de 1024 bytes no resultado. Para resolver isso, execute esta consulta antes de sua consulta:
SET group_concat_max_len = 2048;
Claro, você pode alterar
2048
de acordo com suas necessidades. Para calcular e atribuir o valor:SET group_concat_max_len = CAST(
(SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
FROM peoples_hobbies
GROUP BY person_id) AS UNSIGNED);