sql >> Databáze >  >> RDS >> Mysql

Jak zřetězit více řádků do jednoho sloupce v MySQL

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.

  1. Jaký je výchozí název omezení v PostgreSQL?

  2. Paralelní prováděcí plány – větve a vlákna

  3. Ustanovení kde filtrovat řádky v MySQL

  4. Jak exportovat databázi mysql pomocí příkazového řádku?