PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Equivalente a PostgreSQL GROUP_CONCAT()

Alcuni RDBMS come MySQL e MariaDB hanno un GROUP_CONCAT() funzione che consente di restituire una colonna di query come un elenco delimitato (ad esempio un elenco separato da virgole).

PostgreSQL ha una funzione simile chiamata STRING_AGG() . Questa funzione funziona più o meno allo stesso modo di GROUP_CONCAT() funziona in MySQL e MariaDB.

Esempio

Ecco un esempio di base per dimostrare come STRING_AGG() di PostgreSQL la funzione funziona:

SELECT STRING_AGG(genre, ',') FROM Genres;

Risultato:

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

Ecco cosa succede quando eseguiamo la query senza STRING_AGG() funzione:

SELECT genre FROM Genres;

Risultato:

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

Otteniamo otto righe, ciascuna con un valore separato, invece di una lunga riga separata da virgole di tutti i valori.

Semmai, STRING_AGG() di PostgreSQL è più simile a GROUP_CONCAT() di MySQL rispetto all'omonima funzione di MariaDB. Lo dico perché GROUP_CONCAT() di MariaDB ci consente di fornire un LIMIT clausola (come da MariaDB 10.3.3), direttamente all'interno della funzione stessa. MySQL GROUP_CONCAT() non supporta il LIMIT clausola, e nemmeno STRING_AGG() di PostgreSQL funzione (almeno, non al momento in cui scrivo).

Un'altra differenza è che STRING_AGG() di PostgreSQL richiede un secondo argomento (che specifica il delimitatore da utilizzare). Sia MySQL che MariaDB lo rendono opzionale con il loro GROUP_CONCAT() funzioni.

STRING_AGG() di Postgres accetta un ORDER BY clausola e un DISTINCT clausola (così come MariaDB e GROUP_CONCAT() di MySQL funzioni).

Vedi STRING_AGG() Funzione in PostgreSQL per ulteriori esempi.

E se sei interessato, SQL Server ha anche un STRING_AGG() funzione che funziona più o meno allo stesso modo.