Re: Агрегация массивов
От | Mihail Nasedkin |
---|---|
Тема | Re: Агрегация массивов |
Дата | |
Msg-id | AANLkTik=wLqUiG9S0KwKco2R7WHePAuSV8RG1GvQTc=K@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Агрегация массивов (Mihail Nasedkin <m.nasedkin@gmail.com>) |
Ответы |
Re: [pgsql-ru-general] Re: Агрегация массивов
|
Список | pgsql-ru-general |
В последний мой вариант отличается от первого включением в результирующий массив всех (и 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}" >>> >>> Результат тот, который требуется, но можно ли сделать агрегацию >>> массивов в одной функции? >>> >>> -- >>> --- >>> С уважением, >>> Михаил Наседкин >>> >> >> >> >> -- >> --- >> С уважением, >> Михаил Наседкин >> > > > -- > --- > С уважением, > Михаил Наседкин > -- --- С уважением, Михаил Наседкин
В списке pgsql-ru-general по дате отправления: