我正在尝试在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),但是没有运气。
答案 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 ;