Подтвердить что ты не робот

Запрос PostgreSQL для возврата результатов в виде списка, разделенного запятыми

Скажем, у вас есть запрос SELECT id from table (реальный случай - это сложный запрос), который возвращает вам несколько результатов.

Проблема заключается в том, как вернуть все id в одну строку, разделенные запятой?

4b9b3361

Ответ 1

SELECT string_agg(id, ',') FROM table

Требуется PostgreSQL 9.0, но это не проблема.

Ответ 2

Вы можете использовать функции 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

Ответ 3

Вы можете сгенерировать CSV из любого SQL-запроса с помощью psql:

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

В результате myfile.csv будет иметь имена столбцов набора результатов SQL как заголовки столбцов CSV, а кортежи запросов - как строки CSV.

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

Ответ 4

использовать array_to_string() & Функция array() для того же.

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