红移上 array_agg() 或 string_agg() 的替代方案

Bha*_*wan 8 sql amazon-redshift

我正在使用此查询来获取汇总结果:

select _bs, string_agg(_wbns, ',') from bag group by 1;
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

运行查询时出错:函数 string_agg(字符变化,“未知”)不存在提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

我也试过 array_agg() 并得到同样的错误。

请帮助我找出可用于汇总结果的其他选项。

Zay*_*hin 10

你必须使用listaggreshift

对于查询中的每个组,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;
Run Code Online (Sandbox Code Playgroud)

为了更好地理解Listagg


Bri*_*eau 5

要返回数组类型而不是 varchar,您需要将LISTAGG函数与SPLIT_TO_ARRAY函数组合起来,如下所示:

SELECT
  some_grouping_key,
  SPLIT_TO_ARRAY(LISTAGG(col_to_agg, ','), ',')
FROM some_table
GROUP BY 1
Run Code Online (Sandbox Code Playgroud)