Đơ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