Algunos RDBMS como MySQL y MariaDB tienen un GROUP_CONCAT() función que le permite devolver una columna de consulta como una lista delimitada (por ejemplo, una lista separada por comas).
PostgreSQL tiene una función similar llamada STRING_AGG() . Esta función funciona más o menos de la misma manera que GROUP_CONCAT() funciona en MySQL y MariaDB.
Ejemplo
Aquí hay un ejemplo básico para demostrar cómo STRING_AGG() de PostgreSQL la función funciona:
SELECT STRING_AGG(genre, ',') FROM Genres; Resultado:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Esto es lo que sucede cuando hacemos la consulta sin STRING_AGG() función:
SELECT genre FROM Genres; Resultado:
+---------+ | genre | +---------+ | Rock | | Jazz | | Country | | Pop | | Blues | | Hip Hop | | Rap | | Punk | +---------+ (8 rows)
Obtenemos ocho filas, cada una con un valor independiente, en lugar de una larga fila separada por comas de todos los valores.
En todo caso, el STRING_AGG() de PostgreSQL es más como GROUP_CONCAT() de MySQL que la función de MariaDB del mismo nombre. Digo esto porque GROUP_CONCAT() de MariaDB nos permite proporcionar un LIMIT cláusula (a partir de MariaDB 10.3.3), directamente desde dentro de la propia función. MySQL GROUP_CONCAT() no admite el LIMIT y tampoco la cláusula STRING_AGG() de PostgreSQL función (al menos, no en el momento de escribir este artículo).
Otra diferencia es que STRING_AGG() de PostgreSQL requiere un segundo argumento (que especifica el delimitador a usar). Tanto MySQL como MariaDB hacen que esto sea opcional con su GROUP_CONCAT() funciones.
STRING_AGG() de Postgres acepta un ORDER BY cláusula, y un DISTINCT cláusula (al igual que MariaDB y MySQL's GROUP_CONCAT() funciones).
Ver STRING_AGG() Función en PostgreSQL para más ejemplos.
Y en caso de que esté interesado, SQL Server también tiene un STRING_AGG() función que funciona prácticamente de la misma manera.