Prostsze dzięki funkcji agregującej string_agg()
(Postgres 9.0 lub nowszy):
SELECT movie, string_agg(actor, ', ') AS actor_list
FROM tbl
GROUP BY 1;
1
w GROUP BY 1
jest odniesieniem pozycyjnym i skrótem do filmu GROUP BY movie
w tym przypadku.
string_agg()
oczekuje typu danych text
jako wejście. Inne typy muszą być rzucane jawnie (actor::text
) — chyba, że niejawne rzutowanie na text
jest zdefiniowany - co ma miejsce w przypadku wszystkich innych typów znaków (varchar
, character
, "char"
) i kilka innych typów.
Jak skomentował isapir, możesz dodać ORDER BY
klauzula w wywołaniu agregującym, aby uzyskać posortowaną listę - jeśli tego potrzebujesz. Na przykład:
SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY 1;
Ale zazwyczaj szybsze jest sortowanie wierszy w podzapytaniu. Zobacz:
- Postgres SQL - Utwórz tablicę w Select