Sommige RDBMS'en zoals MySQL en MariaDB hebben een GROUP_CONCAT()
functie waarmee u een querykolom kunt retourneren als een gescheiden lijst (bijvoorbeeld een door komma's gescheiden lijst).
PostgreSQL heeft een vergelijkbare functie genaamd STRING_AGG()
. Deze functie werkt op vrijwel dezelfde manier als GROUP_CONCAT()
werkt in MySQL en MariaDB.
Voorbeeld
Hier is een eenvoudig voorbeeld om te demonstreren hoe STRING_AGG()
van PostgreSQL functie werkt:
SELECT STRING_AGG(genre, ',') FROM Genres;
Resultaat:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Dit is wat er gebeurt als we de query gewoon uitvoeren zonder de STRING_AGG()
functie:
SELECT genre FROM Genres;
Resultaat:
+---------+ | genre | +---------+ | Rock | | Jazz | | Country | | Pop | | Blues | | Hip Hop | | Rap | | Punk | +---------+ (8 rows)
We krijgen acht rijen, elk met een afzonderlijke waarde, in plaats van één lange door komma's gescheiden rij met alle waarden.
Als er iets is, PostgreSQL's STRING_AGG()
lijkt meer op MySQL's GROUP_CONCAT()
dan de gelijknamige functie van MariaDB. Ik zeg dit omdat MariaDB's GROUP_CONCAT()
stelt ons in staat om een LIMIT
clausule (vanaf MariaDB 10.3.3), rechtstreeks vanuit de functie zelf. MySQL GROUP_CONCAT()
ondersteunt de LIMIT
. niet clausule, en de STRING_AGG()
. van PostgreSQL ook niet functie (tenminste, niet op het moment van schrijven).
Een ander verschil is dat STRING_AGG()
. van PostgreSQL vereist een tweede argument (dat het scheidingsteken specificeert dat moet worden gebruikt). Zowel MySQL als MariaDB maken dit optioneel met hun GROUP_CONCAT()
functies.
STRING_AGG()
. van Postgres accepteert een ORDER BY
clausule, en een DISTINCT
clausule (net als MariaDB en MySQL's GROUP_CONCAT()
functies).
Zie STRING_AGG()
Functie in PostgreSQL voor meer voorbeelden.
En mocht je geïnteresseerd zijn, SQL Server heeft ook een STRING_AGG()
functie die op vrijwel dezelfde manier werkt.