Đơn giản hơn với hàm tổng hợp string_agg() (Postgres 9.0 trở lên):
SELECT movie, string_agg(actor, ', ') AS actor_list
FROM tbl
GROUP BY 1;
1 trong GROUP BY 1 là một tham chiếu vị trí và một lối tắt cho GROUP BY movie trong trường hợp này.
string_agg() mong đợi kiểu dữ liệu text làm đầu vào. Các loại khác cần được truyền một cách rõ ràng (actor::text ) - trừ khi truyền ngầm thành text được định nghĩa - đó là trường hợp cho tất cả các kiểu ký tự khác (varchar , character , "char" ), và một số loại khác.
Như isapir đã nhận xét, bạn có thể thêm ORDER BY mệnh đề trong lệnh gọi tổng hợp để có được danh sách đã sắp xếp - bạn có cần điều đó không. Như:
SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY 1; Nhưng thường nhanh hơn để sắp xếp các hàng trong một truy vấn con. Xem:
- Postgres SQL - Tạo mảng được chọn