A função MySQL GROUP_CONCAT não tão conhecida é usada … (aguarde)
… para concatenar em uma única string vários resultados de uma consulta agrupada.
Daí o nome desta função;
Agora, quando é útil?
Digamos que você tenha um banco de dados com funcionários e departamentos (você pode obter esse banco de dados aqui: https://launchpad.net/test-db ).
Digamos que você queira verificar a lista de funcionários de cada departamento. Aqui está o que você pode fazer:
SELECT departments.dept_name AS Department, GROUP_CONCAT( CONCAT( last_name, ' ', first_name ) ) AS name
FROM employees
INNER JOIN dept_emp ON dept_emp.emp_no = employees.emp_no
INNER JOIN departments ON departments.dept_no = dept_emp.dept_no
GROUP BY departments.dept_name;
O resultado é o seguinte (truncado para facilitar a leitura):
Department | name
Customer Service | Sluis Mary,Lortz Huan,Tramer Basil,Billingsley ...
Development | Facello Georgi,Preusig Anneke,Kalloufi Saniya,...
Finance | Stamatiou Magy,Dredge Yinghua,McAlpine Alejandro,...
and so on...
Como você pode ver, esta função permite usar a cláusula GROUP BY sem perder os valores associados (o nome dos funcionários em nosso exemplo).
Mais dicas:
– você pode eliminar duplicatas nos valores concatenados usando a cláusula DISTINCT
SELECT departments.dept_name AS Department, GROUP_CONCAT(DISTINCT CONCAT( last_name, ' ', first_name) ) AS name
você pode alterar o separador padrão para qualquer símbolo que desejar
SELECT departamentos.nome do departamento AS Departamento, GROUP CONCAT (CONCAT (sobrenome , ”, nome) SEPARATOR ‘#’) AS nome
o resultado é truncado de acordo com a variável concat do grupo max_len do MySQL, mas você pode alterá-lo para o valor de sua escolha
SET SESSION grupo concat max_len = 1000000