PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL GROUP_CONCAT() Equivalente


Alguns RDBMSs como MySQL e MariaDB têm um GROUP_CONCAT() função que permite retornar uma coluna de consulta como uma lista delimitada (por exemplo, uma lista separada por vírgulas).

PostgreSQL tem uma função similar chamada STRING_AGG() . Esta função funciona praticamente da mesma maneira que GROUP_CONCAT() funciona em MySQL e MariaDB.

Exemplo


Aqui está um exemplo básico para demonstrar como o STRING_AGG() do PostgreSQL função funciona:
SELECT STRING_AGG(genre, ',') FROM Genres;

Resultado:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk

Veja o que acontece quando fazemos a consulta sem o STRING_AGG() função:
SELECT genre FROM Genres;

Resultado:
+---------+
|  genre  |
+---------+
| Rock    |
| Jazz    |
| Country |
| Pop     |
| Blues   |
| Hip Hop |
| Rap     |
| Punk    |
+---------+
(8 rows)

Obtemos oito linhas, cada uma com um valor separado, em vez de uma longa linha separada por vírgulas de todos os valores.

Se alguma coisa, o STRING_AGG() do PostgreSQL é mais parecido com o GROUP_CONCAT() do MySQL do que a função de mesmo nome do MariaDB. Digo isso porque o GROUP_CONCAT() do MariaDB nos permite fornecer um LIMIT cláusula (a partir do MariaDB 10.3.3), diretamente de dentro da própria função. MySQL GROUP_CONCAT() não suporta o LIMIT cláusula, e nem o STRING_AGG() do PostgreSQL função (pelo menos, não no momento da redação deste artigo).

Outra diferença é que o STRING_AGG() do PostgreSQL requer um segundo argumento (que especifica o delimitador a ser usado). Tanto o MySQL quanto o MariaDB tornam isso opcional com seu GROUP_CONCAT() funções.

STRING_AGG() do Postgres aceita um ORDER BY cláusula e um DISTINCT cláusula (assim como o MariaDB e o GROUP_CONCAT() do MySQL funções).

Consulte STRING_AGG() Função no PostgreSQL para mais exemplos.

E caso você esteja interessado, o SQL Server também tem um STRING_AGG() função que funciona praticamente da mesma maneira.