From: | Alexey Bashtanov <bashtanov(at)imap(dot)cc> |
---|---|
To: | Mike Martin <redtux1(at)gmail(dot)com>, pgsql-general(at)postgresql(dot)org |
Subject: | Re: Array_agg and dimensions in Array |
Date: | 2019-01-16 16:34:59 |
Message-ID: | e06a5c6e-a92e-f5e2-46a7-4e8652d6a245@imap.cc |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Hi Mike,
> I have come across a problem which I cant seem to solve in a nice way
> Basically I have a (small) table of tags
> What I need to is combine two concatenated fields with a literal value
> as an array element.
You can create a custom aggregate function like this:
alexey(at)[local]/alexey=# create aggregate array_cat_agg(anyarray) (SFUNC
= array_cat, STYPE = anyarray, COMBINEFUNC = array_cat, PARALLEL = SAFE);
CREATE AGGREGATE
And use it like this:
alexey(at)[local]/alexey=# select grp, array_cat_agg(array['--foo', bar ||
'=' || baz]) from (values ('g1', 'a', 'b'), ('g1', 'c', 'd'), ('g2',
'e', 'f')) _ (grp, bar, baz) group by grp;
┌─────┬───────────────────────┐
│ grp │ array_cat_agg │
├─────┼───────────────────────┤
│ g2 │ {--foo,e=f} │
│ g1 │ {--foo,a=b,--foo,c=d} │
└─────┴───────────────────────┘
(2 rows)
Is that what you need?
Best, Alex
From | Date | Subject | |
---|---|---|---|
Next Message | Andrew Gierth | 2019-01-16 16:40:49 | Re: Weird behaviour of ROLLUP/GROUPING |
Previous Message | Andrew Gierth | 2019-01-16 15:55:21 | Re: Weird behaviour of ROLLUP/GROUPING |