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