De agregaciónsolo PostgreSQL

STRING_AGG

Une valores de muchas filas en un solo texto con un separador.

Sintaxis

STRING_AGG(<expresión>, <separador>)
STRING_AGG(<expresión>, <separador> ORDER BY <criterio de orden>)

Una función de agregación: convierte un grupo de filas en una sola línea de texto. El orden de los elementos no está garantizado por sí solo, así que indícalo con ORDER BY dentro de los propios paréntesis. En el estándar SQL, una función parecida se llama LISTAGG.

Datos para los ejemplos

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

Estas tablas ya están creadas en el entorno de pruebas y los ejemplos de abajo las usan. ¿Quieres repetirlo en tu propia base de datos? Copia el SQL.

Todos los nombres en una sola cadena
SELECT STRING_AGG(name, ', ') AS names
FROM employees;
names
Emma, Liam, Olivia, Noah, Sophia
Una lista aparte para cada departamento
SELECT department,
STRING_AGG(name, ', ' ORDER BY name) AS team
FROM employees
GROUP BY department
ORDER BY department;
departmentteam
backendEmma, Liam
designSophia
frontendNoah, Olivia

El ORDER BY de los paréntesis fija el orden de los nombres dentro de la cadena, y el del final de la consulta, el orden de los propios departamentos.

Ten en cuenta

Solo acepta texto: STRING_AGG(id, ', ') con un id numérico es un error. Convierte el tipo: STRING_AGG(id::text, ', ').

Los NULL se saltan en silencio, y si no hay ninguna fila, el resultado es NULL, no una cadena vacía. Si necesitas un texto vacío, envuélvela: COALESCE(STRING_AGG(…), '').

Para valores únicos, escribe STRING_AGG(DISTINCT department, ', '). Entonces el ORDER BY interior solo puede ordenar por esa misma expresión.

Funciones relacionadas

ARRAY_AGGCONCAT_WS