По-просто с агрегатната функция string_agg() (Postgres 9.0 или по-нова версия):
SELECT movie, string_agg(actor, ', ') AS actor_list
FROM tbl
GROUP BY 1;
1 в GROUP BY 1 е позиционна препратка и пряк път за GROUP BY movie в този случай.
string_agg() очаква тип данни text като вход. Останалите типове трябва да се предават изрично (actor::text ) - освен имплицитно прехвърляне към text е дефиниран - какъвто е случаят с всички други типове знаци (varchar , character , "char" ), и някои други видове.
Както isapir коментира, можете да добавите ORDER BY клауза в обобщеното извикване, за да получите сортиран списък - ако имате нужда от това. Като:
SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY 1; Но обикновено е по-бързо да сортирате редове в подзаявка. Вижте:
- Postgres SQL – Създаване на масив в Select