Обсуждение: concatenate text
Can I do something like this? SELECT sum(name) FROM table; Where name is a text field. I know 'sum' doesn't work, but is there another solution? '||' is not good because it will take just 2 arguments. Thank you.
On Mon, Sep 05, 2005 at 03:00:30AM +0300, Sterpu Victor wrote: > Can I do something like this? > SELECT sum(name) FROM table; > > Where name is a text field. > I know 'sum' doesn't work, but is there another solution? > '||' is not good because it will take just 2 arguments. Currently, you can use a custom aggregate like array_accum() http://www.postgresql.org/docs/current/static/xaggr.html combined with the array_to_string() like this: SELECT array_to_string(array_accum(email), ', ') AS "emails" FROM person_email; Hope this helps :) Cheers, D -- David Fetter david@fetter.org http://fetter.org/ phone: +1 510 893 6100 mobile: +1 415 235 3778 Remember to vote!
On Mon, Sep 05, 2005 at 03:00:30AM +0300, Sterpu Victor wrote:
> Can I do something like this?
> SELECT sum(name) FROM table;
>
> Where name is a text field.
> I know 'sum' doesn't work, but is there another solution?
> '||' is not good because it will take just 2 arguments.
Are you looking for an aggregate in particular or will any solution
suffice? Here's a trivial example that works in 7.4 and later:
CREATE TABLE foo (name text);
INSERT INTO foo VALUES ('Alice');
INSERT INTO foo VALUES ('Bob');
INSERT INTO foo VALUES ('Carol');
INSERT INTO foo VALUES ('Dave');
SELECT array_to_string(ARRAY(SELECT name FROM foo), '');
array_to_string
-------------------
AliceBobCarolDave
(1 row)
If you need an aggregate then search the archives; examples have
been posted before.
--
Michael Fuhr
On Sun, 2005-09-04 at 20:37 -0400, Allan Wang wrote: > On Mon, 2005-09-05 at 03:00 +0300, Sterpu Victor wrote: > > Can I do something like this? > > SELECT sum(name) FROM table; > > > > You can add a custom aggregate function that turns your data into an > array, see http://www.postgresql.org/docs/current/static/xaggr.html > > You can then use array_to_string if you want them comma seperated or > something. > > Allan Wang Whoops, I keep forgetting to hit reply to all.
Am Montag, den 05.09.2005, 03:00 +0300 schrieb Sterpu Victor: > Can I do something like this? > SELECT sum(name) FROM table; > > Where name is a text field. > I know 'sum' doesn't work, but is there another solution? > '||' is not good because it will take just 2 arguments. > Yes you can write an aggregate using built in textcat() function or via array_append() if you are bulding an array first and translate it into a string on output of your aggregate. (This should be faster, I personally used the version with textcat) Regards Tino
David Fetter wrote: >On Mon, Sep 05, 2005 at 03:00:30AM +0300, Sterpu Victor wrote: > > >>Can I do something like this? >>SELECT sum(name) FROM table; >> >>Where name is a text field. >>I know 'sum' doesn't work, but is there another solution? >>'||' is not good because it will take just 2 arguments. >> >> > >Currently, you can use a custom aggregate like array_accum() >http://www.postgresql.org/docs/current/static/xaggr.html > >combined with the array_to_string() like this: > >SELECT array_to_string(array_accum(email), ', ') AS "emails" >FROM person_email; > > > Check out the "User Comments" at http://www.postgresql.org/docs/8.0/interactive/sql-createaggregate.html There are a couple good suggestions there that don't deal with arrays.