Re: [pgsql-ru-general] Агрегация массивов

From: Dmitriy Igrishin <dmitigr(at)gmail(dot)com>
To: Mihail Nasedkin <m(dot)nasedkin(at)gmail(dot)com>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: [pgsql-ru-general] Агрегация массивов
Date: 2010-12-12 11:42:17
Message-ID: AANLkTimPaiv7GobtxWcGNV=AXTU=vWDJzm0UDbF+E2QU@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

Привет,

CREATE TABLE att (id integer not null, dat integer[] not null);
INSERT INTO att(id, dat) SELECT 1, ARRAY[1,2];
INSERT INTO att(id, dat) SELECT 1, ARRAY[3,4,5];
INSERT INTO att(id, dat) SELECT 2, ARRAY[6];
INSERT INTO att(id, dat) SELECT 2, ARRAY[7,8,9,10];
SELECT id, array_agg(dat) FROM(SELECT id, unnest(dat) as dat from att) AS
foo GROUP BY id;

id | array_agg
----+--------------
1 | {1,2,3,4,5}
2 | {6,7,8,9,10}
(2 rows)

Надеюсь, что понял Вас правильно.

12 декабря 2010 г. 14:24 пользователь Mihail Nasedkin
<m(dot)nasedkin(at)gmail(dot)com>написал:

> Как обычно, доброго всем.
>
> Встала задача агрегировать не одиночные значения, а массивы в один
> результирующий массив.
> Пока смог реализовать такой, неуклюжий вариант:
>
> select id,
>
> string_to_array(
> array_to_string(
> array_concat(
> array_to_string(arr, ',')
> )
> , ',')
> , ',')::int[]
>
> from (
> values
> (0, array[0]),
> (1, array[1,2]),
> (1, array[3,4,5])
> ) v (id, arr)
>
> group by id
> ;
>
> Результат:
> 1;"{1,2,3,4,5}"
> 0;"{0}"
>
> Результат тот, который требуется, но можно ли сделать агрегацию
> массивов в одной функции?
>
> --
> ---
> С уважением,
> Михаил Наседкин
>
> --
> Sent via pgsql-ru-general mailing list (pgsql-ru-general(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-ru-general
>

--
// Dmitriy.

In response to

Responses

Browse pgsql-ru-general by date

  From Date Subject
Next Message Mihail Nasedkin 2010-12-12 12:06:31 Re: [pgsql-ru-general] Агрегация массивов
Previous Message Mihail Nasedkin 2010-12-12 11:24:57 Агрегация массивов