redshift上array_agg()或string_agg()的替代方法

时间:2018-09-19 12:26:53

标签: sql amazon-redshift

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

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

我收到此错误:

  

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

我还尝试了array_agg()并得到相同的错误。

请帮助我弄清楚我可以用来汇总结果的其他选项。

4 个答案:

答案 0 :(得分:2)

您必须使用java.time进行换档

对于查询中的每个组,LISTAGG聚合函数根据ORDER BY表达式对该组的行进行排序,然后将值连接为单个字符串。

LISTAGG是仅计算节点功能。如果查询未引用用户定义的表或Amazon Redshift系统表,该函数将返回错误。

您的查询将如下所示

listagg

为了更好地理解Listagg

答案 1 :(得分:1)

使用listagg函数:

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

答案 2 :(得分:1)

Redshift具有listagg函数,您可以改用它:

SELECT _bs, LISTAGG(_wbns, ',') FROM bag GROUP BY _bs;

答案 3 :(得分:0)

错误:必须在至少一个用户创建的表上应用一个或多个使用的函数。 仅用户表功能的示例包括LISTAGG,MEDIAN,PERCENTILE_CONT等

SELECT   refc.constraint_name,   refc.update_rule,   refc.delete_rule,   kcu.table_name,   
LISTAGG(distinct kcu.column_name, ',') AS columns   
FROM   information_schema.referential_constraints AS refc,   
information_schema.key_column_usage AS kcu
WHERE   refc.constraint_schema = 'abc'   AND refc.constraint_name = kcu.constraint_name   AND refc.constraint_schema = kcu.table_schema   
AND kcu.table_name = 'xyz' 
GROUP BY   refc.constraint_name,   refc.update_rule,   refc.delete_rule,   kcu.table_name;