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.