Někdy může být potřeba spojit více řádků do jednoho sloupce. Zde je návod, jak zřetězit více řádků do jednoho sloupce v MySQL pomocí funkce GROUP_CONCAT. Můžete jej také použít ke zřetězení řádků do řetězce nebo k získání dat více řádků v jednom řádku v MySQL.
Jak zřetězit více řádků do jednoho sloupce v MySQL
Zde jsou kroky ke zřetězení více řádků do jednoho sloupce v MySQL.
Řekněme, že máte následující tabulku 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 |
+-----------+------+
Bonusové čtení: Jak vypočítat průběžný součet v MySQL
Řekněme, že chcete nahlásit všechny obchodní zástupce, jejichž prodej>10, pomocí následujícího dotazu.
mysql> select sales_rep from sales where sale>10;
Získáte následující výstup
+-----------+ | sales_rep | +-----------+ | Bob | | Chris | | Dave | +-----------+
Chceme však, aby názvy sales_rep byly uvedeny na jednom řádku.
Bob, Chris, Dave
V tomto případě používáme funkci GROUP_CONCAT ke zřetězení více řádků do jednoho sloupce.
mysql> select group_concat(sales_rep) from sales2 where sale>10; +-------------------------+ | group_concat(sales_rep) | +-------------------------+ | Bob,Chris,Dave | +-------------------------+
GROUP_CONCAT zřetězí všechny nenulové hodnoty ve skupině a vrátí je jako jeden řetězec.
Pokud se chcete vyhnout duplicitám, můžete do dotazu přidat také DISTINCT. Řekněme, že máte následující tabulku.
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 | +---------+------------+------+
Ve výše uvedené tabulce sloupec produkt obsahuje duplicitní hodnoty. Takže používáme klíčové slovo DISTINCT k výběru pouze jedinečných hodnot.
mysql> select group_concat(distinct product) from sales3 where sale>10; +--------------------------------+ | group_concat(distinct product) | +--------------------------------+ | A,B | +--------------------------------+
Bonusové čtení: Jak přidat celkový řádek v MySQL
Můžete také použít funkci GROUP BY ke zřetězení hodnot řádků pro každou skupinu. Zde je příklad. Řekněme, že máte následující tabulku.
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 |
+---------+-----------+
Zde je dotaz, kde zřetězujeme názvy zástupců pro každý produkt pomocí klauzule 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 | +---------+-------------------------+
Po zřetězení více řádků do jednoho sloupce můžete pomocí nástroje pro vytváření sestav vykreslit výsledek do tabulky a sdílet je se svým týmem. Zde je příklad tabulky vytvořené pomocí Ubiq.

Mimochodem, pokud chcete vytvářet grafy, dashboardy a sestavy z databáze MySQL, můžete zkusit Ubiq. Nabízíme 14denní bezplatnou zkušební verzi.