Función postgreSQL string_agg

Shihab Sikder 20 junio 2023
  1. Use el string_agg() para concatenar cadenas en PostgreSQL
  2. Reemplace el duplicado de string_agg() en PostgreSQL
  3. Ordenar en string_agg() en PostgreSQL
Función postgreSQL string_agg

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.

Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website

Artículo relacionado - PostgreSQL String