Función postgreSQL string_agg
-
Use el
string_agg()
para concatenar cadenas en PostgreSQL -
Reemplace el duplicado de
string_agg()
en PostgreSQL -
Ordenar en
string_agg()
en PostgreSQL
Este artículo analiza el uso de la función string_agg()
para concatenar cadenas de un campo de cadena en una consulta GROUP BY
de PostgreSQL.
Use el string_agg()
para concatenar cadenas en PostgreSQL
string_agg()
combina las cadenas que no tienen caracteres nulos. Toma el nombre de la columna y el delimitador (es decir, coma, guión, letras) como entrada.
Disponemos de la siguiente tabla de los empleados y empresa asociada. Se nos pide que enumeremos todos los nombres de los empleados separados por una coma para cada empresa.
Aquí están los siguientes datos que tenemos.
postgres=# SELECT * from employee;
id | companyname | employeename | salary
----+-------------+--------------+---------
1 | Sony | Bob | 1500.55
2 | Sony | Bob | 1500.55
3 | Sony | Jhon | 2000
4 | Sony | Dow | 15000
5 | Sony | Alice | 5602
6 | Google | Jade | 1500.55
7 | Google | Penny | 1500.55
8 | Google | Kat | 1500.55
9 | Google | Merly | 1500.55
10 | Hitachi | Raymond | 1500.55
11 | Hitachi | Skye | 1500.55
12 | Hitachi | Sova | 1500.55
13 | Hitachi | Jenny | 1500.55
Intentemos usar el string_agg
, y se agrupará por Nombre de la empresa
. Ahora, observe que hay una entrada dos veces.
Usa string_agg()
en PSQL
SELECT companyname As CompanyName, STRING_AGG(employeename,', ') as Employees
FROM employee
GROUP BY companyname;
Producción :
companyname | employees
-------------+----------------------------
Sony | Bob, Bob, Jhon, Dow, Alice
Google | Jade, Penny, Kat, Merly
Hitachi | Raymond, Skye, Sova, Jenny
(3 rows)
Ahora, podemos ver que imprime todos los nombres de los empleados de cada empresa. Podemos ver que Bob
está impreso dos veces en el Sony
si nos damos cuenta.
Reemplace el duplicado de string_agg()
en PostgreSQL
Para eliminar el duplicado, podemos agregar la palabra clave DISTINCT
en la función string_agg()
antes del nombre de la columna que queremos concatenar.
Por lo tanto, la modificación del SQL anterior que eliminará el duplicado de string_agg()
tendrá el siguiente aspecto.
SELECT companyname As CompanyName, STRING_AGG(employeename,', ') as Employees
FROM employee
GROUP BY companyname;
Producción :
companyname | employees
-------------+----------------------------
Google | Jade, Kat, Merly, Penny
Hitachi | Jenny, Raymond, Skye, Sovav
Sony | Alice, Bob, Dow, Jhon
(3 rows)
Ordenar en string_agg()
en PostgreSQL
La función string_agg()
puede tomar parámetros como una consulta SQL. Entonces, por ejemplo, si desea concatenar la cadena en orden inverso a simplemente escribir el orden, puede cambiar el orden de la cadena de salida.
Entonces, el código actualizado será como el siguiente.
SELECT companyname As CompanyName, STRING_AGG(DISTINCT employeename,', ' ORDER BY employeename desc) as Employees
FROM employee
GROUP BY companyname;
Producción :
companyname | employees
-------------+----------------------------
Google | Penny, Merly, Kat, Jade
Hitachi | Sova, Skye, Raymond, Jenny
Sony | Jhon, Dow, Bob, Alice
(3 rows)
Aquí hay un blog para el string_agg
. Además, puede consultar la documentación oficial.
Puede encontrar los comandos crear tabla
e insertar
en este enlace pastebin
.