Re: [pgsql-ru-general] Re: Агрегация массивов - Mailing list pgsql-ru-general
From | Dmitriy Igrishin |
---|---|
Subject | Re: [pgsql-ru-general] Re: Агрегация массивов |
Date | |
Msg-id | AANLkTikopBueCrBODHrGAy3D=F7FdpFBQh09g_q5n-1C@mail.gmail.com Whole thread Raw |
In response to | Re: Агрегация массивов (Mihail Nasedkin <m.nasedkin@gmail.com>) |
Responses |
Re: [pgsql-ru-general] Re: Агрегация массивов
|
List | pgsql-ru-general |
Кстати, в Постгресе есть функция array_cat, которая делает
то же, что и Ваша "специть2массива".
Я полагаю, что array_agg реализован эффективнее, чем собственно
созданный аггрегат, вызывающий ту или иную функцию конкатенации.
Впрочем, это надо проверять. Решать Вам.
--
// Dmitriy.
то же, что и Ваша "специть2массива".
Я полагаю, что array_agg реализован эффективнее, чем собственно
созданный аггрегат, вызывающий ту или иную функцию конкатенации.
Впрочем, это надо проверять. Решать Вам.
12 декабря 2010 г. 21:00 пользователь Mihail Nasedkin <m.nasedkin@gmail.com> написал:
В последний мой вариант отличается от первого включением в
результирующий массив всех (и null-значений элементов).
Связка string_to_array(array_to_string(...), ...) полезна в случае,
если нужно отбросить null-значения. Для второго варианта эту связку
также можно использовать в функции "сцепить2массива".
Быстродействие этих двух вариантов у меня не отличалось.
12.12.10, Mihail Nasedkin<m.nasedkin@gmail.com> написал(а):
> А ошибка в имени функции:
>
> CREATE AGGREGATE agregate_array2array (
> sfunc = "сцепить2массива",
> basetype = anyarray,
> stype = anyarray,
> initcond = '{}'
> );
>
> 12.12.10, Mihail Nasedkin<m.nasedkin@gmail.com> написал(а):
>> Вот к чему стремился, нарыл в интернете из разных примеров:
>>
>> CREATE OR REPLACE FUNCTION "сцепить2массива"(anyarray, anyarray)
>> RETURNS anyarray AS
>> ' BEGIN RETURN $1 || $2; END;'
>> LANGUAGE 'plpgsql';
>>
>> CREATE AGGREGATE agregate_array2array (
>> sfunc = array_concat,
>> basetype = anyarray,
>> stype = anyarray,
>> initcond = '{}'
>> );
>>
>> select id,
>> agregate_array2array(arr)
>>
>> from (
>> values
>> (0, array[0]),
>> (1, array[1,2]),
>> (1, array[3,4,5])
>> ) v (id, arr)
>>
>> group by id
>> ;
>>
>> Вообще понимания агрегации у меня нету.
>>
>> 12.12.10, Mihail Nasedkin<m.nasedkin@gmail.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@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-ru-general
--
// Dmitriy.
pgsql-ru-general by date: