Às vezes, pode ser necessário combinar várias linhas em uma coluna. Veja como concatenar várias linhas em uma coluna no MySQL usando a função GROUP_CONCAT. Você também pode usá-lo para concatenar linhas em string ou obter dados de várias linhas em uma única linha no MySQL.
Como concatenar várias linhas em uma coluna no MySQL
Aqui estão as etapas para concatenar várias linhas em uma coluna no MySQL.
Digamos que você tenha a seguinte tabela sales(sales_rep, sale)
mysql> create table sales(sales_rep varchar(255),sale int); mysql> insert into sales(sales_rep, sale) values('Albert',10),('Bob',23), ('Chris',20),('Dave',35); mysql> select * from sales; +-----------+------+ | sales_rep | sale | +-----------+------+ | Albert | 10 | | Bob | 23 | | Chris | 20 | | Dave | 35 | +-----------+------+
Bônus de leitura: Como calcular o total em execução no MySQL
Digamos que você queira relatar todos os representantes de vendas cujas vendas> 10 com a seguinte consulta.
mysql> select sales_rep from sales where sale>10;
Você obteria a seguinte saída
+-----------+ | sales_rep | +-----------+ | Bob | | Chris | | Dave | +-----------+
No entanto, queremos que os nomes sales_rep estejam presentes em uma única linha.
Bob, Chris, Dave
Nesse caso, usamos a função GROUP_CONCAT para concatenar várias linhas em uma coluna.
mysql> select group_concat(sales_rep) from sales2 where sale>10; +-------------------------+ | group_concat(sales_rep) | +-------------------------+ | Bob,Chris,Dave | +-------------------------+
GROUP_CONCAT concatena todos os valores não nulos em um grupo e os retorna como uma única string.
Se você deseja evitar duplicatas, também pode adicionar DISTINCT em sua consulta. Digamos que você tenha a seguinte tabela.
mysql> select * from sales3; +---------+------------+------+ | product | order_date | sale | +---------+------------+------+ | A | 2020-01-01 | 20 | | B | 2020-01-02 | 25 | | B | 2020-01-03 | 15 | | A | 2020-01-04 | 30 | | A | 2020-01-05 | 20 | +---------+------------+------+
Na tabela acima, a coluna produto contém valores duplicados. Portanto, usamos a palavra-chave DISTINCT para escolher apenas valores exclusivos.
mysql> select group_concat(distinct product) from sales3 where sale>10; +--------------------------------+ | group_concat(distinct product) | +--------------------------------+ | A,B | +--------------------------------+
Leitura bônus: Como adicionar linha total no MySQL
Você também pode usar a função GROUP BY para concatenar valores de linha para cada grupo. Aqui está um exemplo. Digamos que você tenha a seguinte tabela.
mysql> create table sales_reps(product varchar(255),sales_rep varchar(255)); mysql> insert into sales_reps(product, sales_rep) values('A','Albert'),('A','Bob'),('A','Chris'), ('B','Dave'),('B','Edgar'),('B','Finch'); mysql> select * from sales_reps; +---------+-----------+ | product | sales_rep | +---------+-----------+ | A | Albert | | A | Bob | | A | Chris | | B | Dave | | B | Edgar | | B | Finch | +---------+-----------+
Aqui está uma consulta onde concatenamos nomes de representantes para cada produto, usando a cláusula GROUP BY.
mysql> select product, group_concat(sales_rep) from sales_reps group by product; +---------+-------------------------+ | product | group_concat(sales_rep) | +---------+-------------------------+ | A | Albert,Bob,Chris | | B | Dave,Edgar,Finch | +---------+-------------------------+
Depois de concatenar várias linhas em uma coluna, você pode usar uma ferramenta de relatório para plotar o resultado em uma tabela e compartilhá-lo com sua equipe. Aqui está um exemplo de uma tabela criada usando Ubiq.
A propósito, se você deseja criar gráficos, painéis e relatórios do banco de dados MySQL, experimente o Ubiq. Oferecemos um teste gratuito de 14 dias.