По-просто с агрегатната функция 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