Альтернативы array_agg () или string_agg () для красного смещения - PullRequest
0 голосов
/ 19 сентября 2018

Я использую этот запрос для получения агрегированных результатов:

select _bs, string_agg(_wbns, ',') from bag group by 1;

Я получаю эту ошибку:

Ошибка при выполнении запроса: функция string_agg (символ меняется, «неизвестно»") не существует СОВЕТ: ни одна функция не соответствует заданному имени и типу аргумента.Возможно, вам понадобится добавить явные приведения типов.

Я также пытался использовать array_agg () и получал ту же ошибку.

Пожалуйста, помогите мне выяснить другие варианты, которые я могу использовать для агрегированиярезультаты.

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Использовать функцию listagg:

select _bs, 
listagg(_wbns,',')
within group (order by _bs) as val
from bag
group by _bs
0 голосов
/ 19 сентября 2018

Redshift имеет функцию listagg, которую можно использовать вместо:

SELECT _bs, LISTAGG(_wbns, ',') FROM bag GROUP BY _bs;
0 голосов
/ 19 сентября 2018

вы должны использовать listagg для изменения

Для каждой группы в запросе агрегатная функция LISTAGG упорядочивает строки для этой группы в соответствии с выражением ORDER BY, а затем объединяет значения в одну строку.

LISTAGG - это функция только для вычислительных узлов.Функция возвращает ошибку, если запрос не ссылается на пользовательскую таблицу или системную таблицу Amazon Redshift.

Ваш запрос будет выглядеть как показано ниже

select _bs, 
listagg(_wbns,',')
within group (order by _wbns) as val
from bag
group by _bs
order by _bs;

для лучшего понимания Listagg

...