![](/img/trans.png)
[英]Using LISTAGG function in SQL causes error: Result size exceeds LISTAGG limit
[英]REDSHIFT : SIZE below 65K BUT "error: Result size exceeds LISTAGG limit code: 8001"
Redhisft listagg DISTINCT function 上是否有可能存在错误?
当我尝试这个
select
case when partition_field IS NOT NULL THEN regexp_count(
listaggdistinct(trim(counted_field), ',') over (partition by partition_field ),
','
) + 1 END AS counted_distinct
from
TABLE
我收到消息错误:结果大小超出 LISTAGG 限制代码:8001
但是我正在连接一个最大长度为 18 的 varchar 字段,此查询验证了该字段
select max(length(counted_field)) from TABLE
如果我运行以下命令,我会得到 10...
select max(COUNTER) from
(SELECT case when partition_field IS NOT NULL THEN
count( counted_field) over (partition by partition_field )
END as COUNTER
from TABLE
)x
所以 10*18... 比 65K 小很多!!!
我究竟做错了什么?
请注意,我与此代码 100% 与 Redshift 文档一致的结果完全相同
select
case when partition_field IS NOT NULL THEN regexp_count(
listagg( distinct counted_field, ',') within group (order by counted_field) over (partition by partition_field ),
','
) + 1 END AS counted_distinct
from
TABLE
在此代码中within group (order by contact_id)
只是因为否则Redshift会返回WINDOW错误
答案是 partition_field 可以是 null 并且为了避免计算 partition_field NULL 代码必须如下:
select
case regexp_count(
listaggdistinct (
CASE WHEN partition_field IS NOT NULL
THEN counted_field END , ','
) over (partition by partition_field ),
','
) + 1 END AS counted_distinct
from
TABLE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.