Některé RDBMS jako MySQL a MariaDB mají GROUP_CONCAT() funkce, která umožňuje vrátit sloupec dotazu jako seznam s oddělovači (například seznam oddělený čárkami).
PostgreSQL má podobnou funkci s názvem STRING_AGG() . Tato funkce funguje v podstatě stejným způsobem jako GROUP_CONCAT() funguje v MySQL a MariaDB.
Příklad
Zde je základní příklad, který demonstruje, jak PostgreSQL STRING_AGG() funkce funguje:
SELECT STRING_AGG(genre, ',') FROM Genres; Výsledek:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Co se stane, když provedeme dotaz bez STRING_AGG() funkce:
SELECT genre FROM Genres; Výsledek:
+---------+ | genre | +---------+ | Rock | | Jazz | | Country | | Pop | | Blues | | Hip Hop | | Rap | | Punk | +---------+ (8 rows)
Dostaneme osm řádků, každý se samostatnou hodnotou, namísto jednoho dlouhého řádku všech hodnot odděleného čárkou.
Pokud něco, tak STRING_AGG() PostgreSQL je spíše jako GROUP_CONCAT() MySQL než stejnojmenná funkce MariaDB. Říkám to proto, že GROUP_CONCAT() MariaDB nám umožňuje poskytnout LIMIT klauzule (od MariaDB 10.3.3), přímo ze samotné funkce. MySQL GROUP_CONCAT() nepodporuje LIMIT klauzule a ani STRING_AGG() PostgreSQL funkce (alespoň ne v době psaní tohoto článku).
Dalším rozdílem je STRING_AGG() PostgreSQL vyžaduje druhý argument (který určuje oddělovač, který se má použít). MySQL i MariaDB to činí volitelným pomocí jejich GROUP_CONCAT() funkce.
STRING_AGG() společnosti Postgres přijímá ORDER BY klauzule a DISTINCT klauzule (stejně jako GROUP_CONCAT() MariaDB a MySQL funkce).
Viz STRING_AGG() Funkce v PostgreSQL pro další příklady.
A v případě, že byste měli zájem, SQL Server má také STRING_AGG() funkce, která funguje v podstatě stejným způsobem.