sql >> Database >  >> RDS >> Mysql

Meerdere rijen samenvoegen tot één kolom in MySQL

Soms moet u mogelijk meerdere rijen in één kolom combineren. Hier leest u hoe u meerdere rijen samenvoegt in één kolom in MySQL met de functie GROUP_CONCAT. Je kunt het ook gebruiken om rijen samen te voegen tot strings, of om meerdere rijgegevens in één rij in MySQL te krijgen.

Hoe meerdere rijen samen te voegen tot één kolom in MySQL

Dit zijn de stappen om meerdere rijen samen te voegen tot één kolom in MySQL.

Stel dat u de volgende tabelverkoop heeft (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 |
+-----------+------+

Bonus lezen: Hoe bereken je het lopende totaal in MySQL

Stel dat u alle verkopers van wie de verkoop> 10 is, wilt rapporteren met de volgende vraag.

mysql> select sales_rep from sales where sale>10;

Je zou de volgende output krijgen

+-----------+
| sales_rep |
+-----------+
| Bob       |
| Chris     |
| Dave      |
+-----------+

We willen echter dat de namen van sales_rep op één regel staan.

Bob, Chris, Dave

In dit geval gebruiken we de functie GROUP_CONCAT om meerdere rijen samen te voegen tot één kolom.

mysql> select group_concat(sales_rep) from sales2 where sale>10;
+-------------------------+
| group_concat(sales_rep) |
+-------------------------+
| Bob,Chris,Dave          |
+-------------------------+

GROUP_CONCAT voegt alle niet-null-waarden in een groep samen en retourneert ze als een enkele tekenreeks.

Als u duplicaten wilt vermijden, kunt u ook DISTINCT toevoegen aan uw zoekopdracht. Stel dat u de volgende tabel heeft.

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 |
+---------+------------+------+

In de bovenstaande tabel is de kolom product bevat dubbele waarden. Daarom gebruiken we het DISTINCT-zoekwoord om alleen unieke waarden te kiezen.

mysql> select group_concat(distinct product) from sales3 where sale>10;
+--------------------------------+
| group_concat(distinct product) |
+--------------------------------+
| A,B                            |
+--------------------------------+

Bonus Lezen: Hoe voeg je een totale rij toe in MySQL

U kunt ook de functie GROUP BY gebruiken om rijwaarden voor elke groep samen te voegen. Hier is een voorbeeld. Stel dat u de volgende tabel heeft.

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     |
+---------+-----------+

Hier is een zoekopdracht waarbij we de namen van vertegenwoordigers voor elk product samenvoegen, met behulp van de GROUP BY-clausule.

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        |
+---------+-------------------------+

Nadat u meerdere rijen in één kolom hebt samengevoegd, kunt u een rapportagetool gebruiken om het resultaat in een tabel te plotten en deze met uw team te delen. Hier is een voorbeeld van een tabel gemaakt met Ubiq.

Trouwens, als je grafieken, dashboards en rapporten uit de MySQL-database wilt maken, kun je Ubiq proberen. We bieden een gratis proefperiode van 14 dagen aan.

  1. Query verwijderen en vernieuwen in ListView in Android (sqlite)

  2. MySQL 'schema maken' en 'database maken' - Is er een verschil?

  3. Oracle verwijdert rijen uit meerdere tabellen

  4. Tijdzone behouden in PostgreSQL-tijdstempeltype