V Postgresu můžeme použít STRING_AGG()
funkci transformovat naše výsledky dotazu do seznamu odděleného čárkami.
Místo toho, aby se každá hodnota vypisovala na samostatném řádku (jako u každého běžného dotazu), jsou hodnoty vypsány na jeden řádek oddělený čárkou (nebo jiným oddělovačem dle našeho výběru).
Příklad
Představte si, že spustíme následující dotaz:
SELECT *
FROM Genres;
Výsledek:
+---------+---------+ | genreid | genre | +---------+---------+ | 1 | Rock | | 2 | Jazz | | 3 | Country | | 4 | Pop | | 5 | Blues | | 6 | Hip Hop | | 7 | Rap | | 8 | Punk | +---------+---------+ (8 rows)
Můžeme spustit následující dotaz pro výstup genre
sloupec jako seznam oddělený čárkami:
SELECT STRING_AGG(genre, ', ')
FROM Genres;
Výsledek:
+-----------------------------------------------------+ | string_agg | +-----------------------------------------------------+ | Rock, Jazz, Country, Pop, Blues, Hip Hop, Rap, Punk | +-----------------------------------------------------+ (1 row)
Můžeme dokonce zahrnout GenreId
sloupec v našem seznamu, pokud chceme:
SELECT STRING_AGG(CONCAT(GenreId, ') ', Genre), ' ' ORDER BY GenreId ASC)
FROM Genres;
Výsledek:
1) Rock 2) Jazz 3) Country 4) Pop 5) Blues 6) Hip Hop 7) Rap 8) Punk
Zde jsem také použil ORDER BY
klauzule v rámci STRING_AGG()
za účelem řazení výsledků podle GenreId
ve vzestupném pořadí.
Můžeme také dělat věci, jako je odstranění duplikátů (pomocí DISTINCT
klauzule), použijte jiný oddělovač a použijte funkci v rámci seskupeného dotazu.
Viz STRING_AGG()
Příklady funkcí v PostgreSQL.