Ответ 1
Упрощен с помощью агрегатной функции 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
в text
- это относится ко всем другим типам символов (varchar
, character
, "char"
) и некоторым другим типам.
Как прокомментировал isapir, вы можете добавить предложение ORDER BY
в агрегированном вызове, чтобы получить отсортированный список - если вам это нужно. Подобно:
SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY 1;
Но обычно быстрее сортировать строки в подзапросе. Увидеть: