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.