如何用listagg连接字符串导致redshift?

时间:2019-05-22 19:22:58

标签: sql amazon-redshift

我正在尝试在Redshift上使用LISTAGG聚合数据,然后将字符串连接到LISTAGG结果。

tmp_table:
Col1 Col2
1    A
1    B
1    C
2    A
2    B

我想做这样的事情:

CREATE TABLE new_table AS (
SELECT 
   Col1, 
   '{"results" : "' || LISTAGG(Col2, ',') WITHIN GROUP (ORDER BY Col1) || '"}' as list_result
FROM 
   tmp_table 
GROUP BY 
    1 
)

理想结果如下:

new_table:
Col1 Col2
1    {"results" : "A,B,C"}
2    {"results" : "A,B"}

在不使用串联字符串的情况下运行此程序效果很好,但是一旦我将字符串连接起来,我就会得到:

ERROR:  Column length exceeds maximum allowed (maximum column length is 65535)

我确定这不会超出列的长度,因为我检查了最长的LISTAGG结果的长度,它只有30个字符。我也尝试将LISTAGG结果转换为VARCHAR(MAX),但是没有运气。

2 个答案:

答案 0 :(得分:0)

我认为问题在于LISTAGG会自动创建一个最大长度为65535的列,因此,如果您将其串联起来,则会出现错误。

答案 1 :(得分:0)

如果您将其转换为另一个字符串长度,是否可行?

CREATE TABLE new_table AS (
    SELECT Col1, 
           '{"results" : "' || CAST(LISTAGG(Col2, ',') WITHIN GROUP (ORDER BY Col1) as VARCHAR(255)) || '"}' as list_result
    FROM tmp_table 
    GROUP BY 1 ;