Thread: How to access array element in pgsql after array_agg
Hello, I wanna ask how I can access array element in array_agg ? I do select array_agg(ids) from x; in ids I have int and result is : array_agg ------------- {3843,2,3543,33} I want to access one element or first one direct in sql query like: select array_agg(ids)[1] from x; and to receive int value 2 Any hints how I can do it ? And also for performance did that is good I to do it in SQL or I should do it in language that I use ? The result in query will return about 2, 3 million rows. Thank you, Cheers, Hristo S.
Le 2014-06-17 à 14:22, Condor <condor@stz-bg.com> a écrit : > I do select array_agg(ids) from x; > in ids I have int and result is : > > array_agg > ------------- > {3843,2,3543,33} > > I want to access one element or first one direct in sql query like: > > select array_agg(ids)[1] from x; > > and to receive int value 2 > > Any hints how I can do it ? This works for me in 9.1: psql (9.1.13) Type "help" for help. svanalytics=> select (array_agg(x))[1] from (values(3843),(2),(3543),(33)) t1(x) ; array_agg ----------- 3843 Note the use of the extra parens around the array_agg call. This is probably a parser issue more than anything else. > And also for performance did that is good I to do it in SQL or I should do it in language that I use ? The result in querywill return about 2, 3 million rows. Do you mean you will have an array of 2, 3 million elements, or 2, 3 million rows with a couple dozen elements each? I’mnot sure which will be easier / faster. I routinely work with million element result sets (rows) and have no issues. Hope that helps! François
On 17-06-2014 22:44, François Beausoleil wrote: > Le 2014-06-17 à 14:22, Condor <condor@stz-bg.com> a écrit : > >> I do select array_agg(ids) from x; >> in ids I have int and result is : >> >> array_agg >> ------------- >> {3843,2,3543,33} >> >> I want to access one element or first one direct in sql query like: >> >> select array_agg(ids)[1] from x; >> >> and to receive int value 2 >> >> Any hints how I can do it ? > > This works for me in 9.1: > > psql (9.1.13) > Type "help" for help. > > svanalytics=> select (array_agg(x))[1] from > (values(3843),(2),(3543),(33)) t1(x) ; > array_agg > ----------- > 3843 > > Note the use of the extra parens around the array_agg call. This is > probably a parser issue more than anything else. > >> And also for performance did that is good I to do it in SQL or I >> should do it in language that I use ? The result in query will return >> about 2, 3 million rows. > > Do you mean you will have an array of 2, 3 million elements, or 2, 3 > million rows with a couple dozen elements each? I’m not sure which > will be easier / faster. I routinely work with million element result > sets (rows) and have no issues. > > Hope that helps! > François Ah, double brackets and works, I did not expect and try select (array_agg(ids))[1] from x; to work but its work. I try: select array_agg(ids)[1] from x; Thank you