แบบสอบถาม PostgreSQL เพื่อส่งคืนผลลัพธ์เป็นรายการที่คั่นด้วยจุลภาค


99

สมมติว่าคุณมีSELECT id from tableข้อความค้นหา (กรณีจริงคือแบบสอบถามที่ซับซ้อน) ที่ส่งคืนผลลัพธ์หลายรายการ

ปัญหาคือจะรับidผลตอบแทนทั้งหมดในแถวเดียวโดยคั่นด้วยจุลภาคได้อย่างไร



"การหลอกลวง" ข้างต้นมีความเกี่ยวข้องและเป็นประโยชน์โดยเฉพาะarray_agg()ฟังก์ชันโดยเฉพาะ
Jay Taylor

คำตอบ:


219

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

ต้องใช้ PostgreSQL 9.0 แต่นั่นไม่ใช่ปัญหา


พบว่าสิ่งนี้มีประโยชน์ในขณะนี้ ขอบคุณ!
gooddadmike

48
โปรดทราบว่าสำหรับฉันอย่างน้อย string_agg ไม่ชอบใช้ int สำหรับอาร์กิวเมนต์แรกดังนั้นฉันจึงทำสิ่งที่ชอบ: string_agg(CAST(id as varchar), ',')แทน
JZC

17
@JZC หรือง่ายกว่านั้น:string_agg(id::text, ',')
Alphaaa

6
หากคุณต้องการจัดเรียงคอลัมน์select string_agg(id, ', ' order by id desc) from table
MA Hossain Tonu

1
ฉันพบรายการที่ซ้ำกันกับคำถามของฉัน แต่แก้ไขด้วยSTRING_AGG(DISTINCT customer_name, ',')
ChristoKiwi

53

คุณสามารถใช้ฟังก์ชัน array () และ array_to_string () ในการสร้างข้อความค้นหาของคุณได้ ด้วยSELECT array( SELECT id FROM table );คุณจะได้รับผลเช่น: {1,2,3,4,5,6}

จากนั้นหากคุณต้องการลบเครื่องหมาย {} ออกคุณสามารถใช้ฟังก์ชัน array_to_string () และใช้ลูกน้ำเป็นตัวคั่นดังนั้น: SELECT array_to_string( array( SELECT id FROM table ), ',' )จะได้ผลลัพธ์ดังนี้: 1,2,3,4,5,6


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

13

คุณสามารถสร้าง CSV จากแบบสอบถาม SQL โดยใช้ psql:

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

myfile.csv ที่เป็นผลลัพธ์จะมีชื่อคอลัมน์ SQL resultset เป็นส่วนหัวคอลัมน์ CSV และคิวรี tuples เป็นแถว CSV

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



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

{1,2,3,4}

ฉันใช้ Postgres 11 และ EntityFramework กำลังดึงข้อมูลเป็นอาร์เรย์ของจำนวนเต็ม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.