W Postgresie możemy użyć STRING_AGG()
funkcja przekształcania wyników zapytania w listę oddzieloną przecinkami.
Zamiast każdej wartości wyprowadzanej w osobnym wierszu (jak w przypadku każdego zwykłego zapytania), wartości są wyprowadzane w jednym wierszu, oddzielonym przecinkiem (lub innym wybranym przez nas ogranicznikiem).
Przykład
Wyobraź sobie, że uruchamiamy następujące zapytanie:
SELECT *
FROM Genres;
Wynik:
+---------+---------+ | genreid | genre | +---------+---------+ | 1 | Rock | | 2 | Jazz | | 3 | Country | | 4 | Pop | | 5 | Blues | | 6 | Hip Hop | | 7 | Rap | | 8 | Punk | +---------+---------+ (8 rows)
Możemy uruchomić następujące zapytanie, aby wyprowadzić genre
kolumna jako lista oddzielona przecinkami:
SELECT STRING_AGG(genre, ', ')
FROM Genres;
Wynik:
+-----------------------------------------------------+ | string_agg | +-----------------------------------------------------+ | Rock, Jazz, Country, Pop, Blues, Hip Hop, Rap, Punk | +-----------------------------------------------------+ (1 row)
Możemy nawet uwzględnić GenreId
kolumna na naszej liście, jeśli chcemy:
SELECT STRING_AGG(CONCAT(GenreId, ') ', Genre), ' ' ORDER BY GenreId ASC)
FROM Genres;
Wynik:
1) Rock 2) Jazz 3) Country 4) Pop 5) Blues 6) Hip Hop 7) Rap 8) Punk
Tutaj również użyłem ORDER BY
klauzula w STRING_AGG()
funkcja w celu posortowania wyników według GenreId
w porządku rosnącym.
Możemy również robić takie rzeczy jak usuwanie duplikatów (za pomocą DISTINCT
klauzuli), użyj innego separatora i użyj funkcji w zgrupowanym zapytaniu.
Zobacz STRING_AGG()
Przykłady funkcji w PostgreSQL.