Vissa RDBMS som MySQL och MariaDB har en GROUP_CONCAT() funktion som låter dig returnera en frågekolumn som en avgränsad lista (till exempel en kommaseparerad lista).
PostgreSQL har en liknande funktion som heter STRING_AGG() . Den här funktionen fungerar på ungefär samma sätt som GROUP_CONCAT() fungerar i MySQL och MariaDB.
Exempel
Här är ett grundläggande exempel för att visa hur PostgreSQL:s STRING_AGG() funktionen fungerar:
SELECT STRING_AGG(genre, ',') FROM Genres; Resultat:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Här är vad som händer när vi bara gör frågan utan STRING_AGG() funktion:
SELECT genre FROM Genres; Resultat:
+---------+ | genre | +---------+ | Rock | | Jazz | | Country | | Pop | | Blues | | Hip Hop | | Rap | | Punk | +---------+ (8 rows)
Vi får åtta rader, var och en med ett separat värde, istället för en lång kommaseparerad rad med alla värden.
Om något, PostgreSQL:s STRING_AGG() är mer som MySQL:s GROUP_CONCAT() än MariaDB:s funktion med samma namn. Jag säger detta eftersom MariaDB:s GROUP_CONCAT() tillåter oss att tillhandahålla en LIMIT klausul (från MariaDB 10.3.3), direkt från själva funktionen. MySQL GROUP_CONCAT() stöder inte LIMIT sats, och inte heller PostgreSQL:s STRING_AGG() funktion (åtminstone inte när detta skrivs).
En annan skillnad är att PostgreSQL:s STRING_AGG() kräver ett andra argument (som anger vilken avgränsare som ska användas). Både MySQL och MariaDB gör detta valfritt med deras GROUP_CONCAT() funktioner.
Postgress STRING_AGG() accepterar en ORDER BY sats och en DISTINCT klausul (liksom MariaDB och MySQL:s GROUP_CONCAT() funktioner).
Se STRING_AGG() Funktion i PostgreSQL för fler exempel.
Och om du är intresserad har SQL Server också en STRING_AGG() funktion som fungerar på ungefär samma sätt.