Понякога може да се наложи да комбинирате няколко реда в една колона. Ето как да свържете множество редове в една колона в MySQL с помощта на функцията GROUP_CONCAT. Можете също да го използвате за обединяване на редове в низ или за получаване на данни от няколко реда в един ред в MySQL.
Как да свържете множество редове в една колона в MySQL
Ето стъпките за свързване на множество редове в една колона в MySQL.
Да приемем, че имате следната таблица 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 |
+-----------+------+
Бонус за четене: Как да изчислите текущата обща сума в MySQL
Да приемем, че искате да докладвате всички търговски представители, чиято продажба>10 със следната заявка.
mysql> select sales_rep from sales where sale>10;
Ще получите следния изход
+-----------+ | sales_rep | +-----------+ | Bob | | Chris | | Dave | +-----------+
Искаме обаче имената на sales_rep да присъстват в един ред.
Bob, Chris, Dave
В този случай използваме функцията GROUP_CONCAT, за да обединим множество редове в една колона.
mysql> select group_concat(sales_rep) from sales2 where sale>10; +-------------------------+ | group_concat(sales_rep) | +-------------------------+ | Bob,Chris,Dave | +-------------------------+
GROUP_CONCAT обединява всички ненулеви стойности в група и ги връща като един низ.
Ако искате да избегнете дублиране, можете също да добавите DISTINCT в заявката си. Да приемем, че имате следната таблица.
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 | +---------+------------+------+
В таблицата по-горе, колоната продукт съдържа дублиращи се стойности. Затова използваме DISTINCT ключова дума, за да изберем само уникални стойности.
mysql> select group_concat(distinct product) from sales3 where sale>10; +--------------------------------+ | group_concat(distinct product) | +--------------------------------+ | A,B | +--------------------------------+
Бонус за четене: Как да добавите общ ред в MySQL
Можете също да използвате функцията GROUP BY, за да конкатенирате стойности на редове за всяка група. Ето един пример. Да приемем, че имате следната таблица.
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 |
+---------+-----------+
Ето заявка, при която свързваме имената на представителите за всеки продукт, използвайки клауза 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 | +---------+-------------------------+
След като свържете няколко реда в една колона, можете да използвате инструмент за отчитане, за да начертаете резултата в таблица и да ги споделите с вашия екип. Ето пример за таблица, създадена с Ubiq.

Между другото, ако искате да създавате диаграми, табла за управление и отчети от MySQL база данни, можете да опитате Ubiq. Предлагаме 14-дневен безплатен пробен период.