Nogle RDBMS'er som MySQL og MariaDB har en GROUP_CONCAT()
funktion, der giver dig mulighed for at returnere en forespørgselskolonne som en afgrænset liste (f.eks. en kommasepareret liste).
PostgreSQL har en lignende funktion kaldet STRING_AGG()
. Denne funktion fungerer stort set på samme måde som GROUP_CONCAT()
virker i MySQL og MariaDB.
Eksempel
Her er et grundlæggende eksempel for at demonstrere, hvordan PostgreSQL's STRING_AGG()
funktion virker:
SELECT STRING_AGG(genre, ',') FROM Genres;
Resultat:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Her er, hvad der sker, når vi bare udfører forespørgslen uden STRING_AGG()
funktion:
SELECT genre FROM Genres;
Resultat:
+---------+ | genre | +---------+ | Rock | | Jazz | | Country | | Pop | | Blues | | Hip Hop | | Rap | | Punk | +---------+ (8 rows)
Vi får otte rækker, hver med en separat værdi, i stedet for en lang kommasepareret række af alle værdier.
Hvis noget, PostgreSQL's STRING_AGG()
er mere som MySQL's GROUP_CONCAT()
end MariaDBs funktion af samme navn. Jeg siger dette, fordi MariaDB's GROUP_CONCAT()
giver os mulighed for at give en LIMIT
klausul (som fra MariaDB 10.3.3), lige fra selve funktionen. MySQL GROUP_CONCAT()
understøtter ikke LIMIT
klausul, og det gør PostgreSQL's STRING_AGG()
heller ikke funktion (i hvert fald ikke i skrivende stund).
En anden forskel er, at PostgreSQL's STRING_AGG()
kræver et andet argument (der specificerer den afgrænsning, der skal bruges). Både MySQL og MariaDB gør dette valgfrit med deres GROUP_CONCAT()
funktioner.
Postgres's STRING_AGG()
accepterer en ORDER BY
klausul og en DISTINCT
klausul (ligesom MariaDB og MySQL's GROUP_CONCAT()
funktioner).
Se STRING_AGG()
Funktion i PostgreSQL for flere eksempler.
Og hvis du er interesseret, har SQL Server også en STRING_AGG()
funktion, der fungerer stort set på samme måde.