2012-08-10 34 views
45

Giả sử bạn có truy vấn SELECT id from table (trường hợp thực là truy vấn phức tạp) sẽ trả lại cho bạn một số kết quả.Truy vấn PostgreSQL để trả lại kết quả dưới dạng danh sách được phân tách bằng dấu phẩy

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

+4

thể trùng lặp của [PostgreSQL GROUP_CONCAT tương đương?] (Http://stackoverflow.com/questions/2560946/postgresql-group-concat-equivalent) – podiluska

+0

Các "dupe" ở trên là có liên quan và hữu ích, đặc biệt là hàm 'array_agg()'. –

Trả lời

94

SELECT string_agg(id, ',') FROM table

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

+0

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

+23

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 một cái gì đó như: 'string_agg (CAST (id như varchar), ',')' thay thế. – JZC

+4

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

37

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

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

+0

'' SELECT array_to_string (id, ',') AS id FROM table'' –

8

Bạn có thể tạo ra một CSV từ bất kỳ truy vấn SQL sử dụng psql:

$ psql 
> \o myfile.csv 
> \f ',' 
> \a 
> SELECT col1 AS column1, col2 AS column2 ... FROM ... 

Các myfile.csv kết quả sẽ có các tên cột SQL resultset như tiêu đề cột CSV, và các bộ truy vấn như hàng CSV.

h/t http://pookey.co.uk/wordpress/archives/51-outputting-from-postgres-to-csv

+3

Hiya, điều này cũng có thể giải quyết vấn đề ... nhưng sẽ tốt nếu bạn có thể cung cấp một giải thích nhỏ về cách thức và lý do nó hoạt động :) Đừng quên - có rất nhiều người mới trên Stack tràn, và họ có thể tìm hiểu một hoặc hai điều từ chuyên môn của bạn - những gì hiển nhiên cho bạn có thể không được như vậy với họ. –

+1

Hoàn toàn @Taryn. Vui lòng hiển thị một ví dụ phù hợp thay cho "một số SQL". –

Các vấn đề liên quan