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.