sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL GROUP_CONCAT() Equivalente

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.