Zapytanie PostgreSQL w celu zwrócenia wyników w postaci listy oddzielonej przecinkami


97

Powiedzmy, że masz plik SELECT id from table zapytanie (w rzeczywistości jest to zapytanie złożone), które zwraca kilka wyników.

Problem w tym, jak uzyskać wszystkie idzwroty w jednym wierszu, oddzielone przecinkami?


4
możliwy duplikat odpowiednika Postgresql GROUP_CONCAT?
podiluska

Powyższe „dupe” było istotne i przydatne, zwłaszcza w przypadku array_agg()funkcji.
Jay Taylor,

Odpowiedzi:


213

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

Wymaga PostgreSQL 9.0, ale to nie jest problem.


Okazało się, że to przydatne właśnie teraz. Dzięki!
gooddadmike

47
Zauważ, że przynajmniej dla mnie string_agg nie lubił brać int jako pierwszego argumentu, więc string_agg(CAST(id as varchar), ',')zamiast tego zrobiłem coś takiego:.
JZC

17
@JZC, a nawet łatwiej:string_agg(id::text, ',')
Alphaaa

6
Jeśli chcesz posortować kolumnęselect string_agg(id, ', ' order by id desc) from table
MA Hossain Tonu

1
W moim zapytaniu natrafiłem na duplikaty, ale rozwiązałem je zSTRING_AGG(DISTINCT customer_name, ',')
ChristoKiwi

53

Możesz użyć funkcji array () i array_to_string () razem z zapytaniem. ZSELECT array( SELECT id FROM table ); temu otrzymasz wynik taki jak: {1,2,3,4,5,6}

Następnie, jeśli chcesz usunąć znaki {}, możesz po prostu użyć funkcji array_to_string () i użyć przecinka jako separatora, więc: SELECT array_to_string( array( SELECT id FROM table ), ',' )otrzyma wynik taki jak: 1,2,3,4,5,6


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


0

użyj funkcji array_to_string () i array () do tego samego.

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

Jak to jest lepsze niż używanie string_agg()?
a_horse_with_no_name

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

{1, 2, 3, 4}

Używam Postgres 11 i EntityFramework pobiera go jako tablicę liczb całkowitych.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.