sql >> Base de Datos >  >> RDS >> Mysql

Cómo concatenar varias filas en una columna en MySQL

A veces, es posible que deba combinar varias filas en una columna. Aquí se explica cómo concatenar varias filas en una columna en MySQL usando la función GROUP_CONCAT. También puede usarlo para concatenar filas en una cadena u obtener datos de varias filas en una sola fila en MySQL.

Cómo concatenar varias filas en una columna en MySQL

Estos son los pasos para concatenar varias filas en una columna en MySQL.

Digamos que tiene la siguiente tabla 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 |
+-----------+------+

Lectura adicional: Cómo calcular el total acumulado en MySQL

Supongamos que desea informar sobre todos los representantes de ventas cuya venta sea>10 con la siguiente consulta.

mysql> select sales_rep from sales where sale>10;

Obtendrías el siguiente resultado

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

Sin embargo, queremos que los nombres de los representantes de ventas estén presentes en una sola línea.

Bob, Chris, Dave

En este caso, usamos la función GROUP_CONCAT para concatenar varias filas en una columna.

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

GROUP_CONCAT concatena todos los valores no nulos en un grupo y los devuelve como una sola cadena.

Si desea evitar duplicados, también puede agregar DISTINCT en su consulta. Digamos que tienes la siguiente tabla.

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

En la tabla anterior, la columna producto contiene valores duplicados. Por lo tanto, usamos la palabra clave DISTINCT para seleccionar solo valores únicos.

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

Lectura adicional: Cómo agregar una fila total en MySQL

También puede usar la función GROUP BY para concatenar valores de fila para cada grupo. Aquí hay un ejemplo. Digamos que tienes la siguiente tabla.

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

Aquí hay una consulta donde concatenamos nombres de representantes para cada producto, usando la cláusula 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        |
+---------+-------------------------+

Después de concatenar varias filas en una columna, puede usar una herramienta de informes para trazar el resultado en una tabla y compartirlo con su equipo. Este es un ejemplo de una tabla creada con Ubiq.

Por cierto, si desea crear gráficos, paneles e informes a partir de la base de datos MySQL, puede probar Ubiq. Ofrecemos una prueba gratuita de 14 días.