Truy vấn PostgreSQL để trả về kết quả dưới dạng danh sách được phân tách bằng dấu phẩy


93

Giả sử bạn có một SELECT id from tabletruy vấn (trường hợp thực là một truy vấn phức tạp) trả về cho bạn một số kết quả.

Vấn đề là làm thế nào để tất cả idtrả về trong một hàng duy nhất, phân cách bằng dấu phẩy?


4
có thể có bản sao của Postgresql GROUP_CONCAT tương đương?
podiluska

"Dupe" ở trên có liên quan và hữu ích, đặc biệt là array_agg()chức năng nói riêng.
Jay Taylor

Câu trả lời:


205

SELECT string_agg(id::text, ',') FROM table

Yêu cầu PostgreSQL 9.0 nhưng đó không phải là vấn đề.


Tìm thấy điều này hữu ích ngay bây giờ. Cảm ơn!
gooddadmike

47
Lưu ý rằng đối với tôi ít nhất, string_agg không thích lấy một int cho đối số đầu tiên của nó, vì vậy tôi đã làm điều gì đó như: string_agg(CAST(id as varchar), ',')thay vào đó.
JZC

17
@JZC, hoặc thậm chí dễ dàng hơn:string_agg(id::text, ',')
Alphaaa 10/11/16

6
Nếu bạn muốn sắp xếp cộtselect string_agg(id, ', ' order by id desc) from table
MA Hossain Tonu,

1
Tôi chạy vào bản sao với truy vấn của tôi, nhưng giải quyết nó vớiSTRING_AGG(DISTINCT customer_name, ',')
ChristoKiwi

51

Bạn có thể sử dụng các hàm array () và array_to_string () để kết hợp với truy vấn của mình. Với SELECT array( SELECT id FROM table );bạn sẽ nhận được kết quả như: {1,2,3,4,5,6}

Sau đó, nếu bạn muốn loại bỏ các dấu {}, bạn chỉ có thể sử dụng hàm array_to_string () và sử dụng dấu phẩy làm dấu phân cách, như vậy: SELECT array_to_string( array( SELECT id FROM table ), ',' )sẽ nhận được kết quả như: 1,2,3,4,5,6


1
SELECT array_to_string( id, ',' ) AS id FROM table
Alex R.


0

sử dụng hàm array_to_string () & array () cho giống nhau.

select array_to_string(array(select column_name from table_name where id=5), ', ');

Làm thế nào là điều này tốt hơn so với sử dụng string_agg()?
a_horse_with_no_name

-1
SELECT array_agg(id, ',') FROM table

{1,2,3,4}

Tôi đang sử dụng Postgres 11 và EntityFramework đang tìm nạp nó dưới dạng một mảng các số nguyên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.