Função MySQL GROUP_CONCAT

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