Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment concaténer plusieurs lignes en une seule colonne dans MySQL

Parfois, vous devrez peut-être combiner plusieurs lignes en une seule colonne. Voici comment concaténer plusieurs lignes dans une colonne dans MySQL à l'aide de la fonction GROUP_CONCAT. Vous pouvez également l'utiliser pour concaténer des lignes en chaîne ou obtenir plusieurs données de ligne sur une seule ligne dans MySQL.

Comment concaténer plusieurs lignes en une seule colonne dans MySQL

Voici les étapes pour concaténer plusieurs lignes en une seule colonne dans MySQL.

Supposons que vous ayez la table suivante 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 |
+-----------+------+

Lecture bonus : Comment calculer le total cumulé dans MySQL

Supposons que vous souhaitiez signaler tous les commerciaux dont la vente> 10 avec la requête suivante.

mysql> select sales_rep from sales where sale>10;

Vous obtiendrez la sortie suivante

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

Cependant, nous voulons que les noms des commerciaux soient présents sur une seule ligne.

Bob, Chris, Dave

Dans ce cas, nous utilisons la fonction GROUP_CONCAT pour concaténer plusieurs lignes en une seule colonne.

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

GROUP_CONCAT concatène toutes les valeurs non nulles d'un groupe et les renvoie sous la forme d'une chaîne unique.

Si vous souhaitez éviter les doublons, vous pouvez également ajouter DISTINCT dans votre requête. Disons que vous avez le tableau suivant.

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

Dans le tableau ci-dessus, la colonne produit contient des valeurs en double. Nous utilisons donc le mot-clé DISTINCT pour ne sélectionner que des valeurs uniques.

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

Lecture bonus : Comment ajouter une ligne totale dans MySQL

Vous pouvez également utiliser la fonction GROUP BY pour concaténer les valeurs de ligne pour chaque groupe. Voici un exemple. Disons que vous avez le tableau suivant.

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

Voici une requête dans laquelle nous concaténons les noms des représentants pour chaque produit, à l'aide de la clause 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        |
+---------+-------------------------+

Après avoir concaténé plusieurs lignes dans une colonne, vous pouvez utiliser un outil de création de rapports pour tracer le résultat dans un tableau et le partager avec votre équipe. Voici un exemple de tableau créé avec Ubiq.

Au fait, si vous souhaitez créer des graphiques, des tableaux de bord et des rapports à partir de la base de données MySQL, vous pouvez essayer Ubiq. Nous offrons un essai gratuit de 14 jours.