Sql Presto中的冷凝阵列

Sql Presto中的冷凝阵列,sql,presto,Sql,Presto,我有一个查询,它使用array\u agg()函数生成数组字符串 SELECT array_agg(message) as sequence from mytable group by id 这将生成一个如下所示的表: sequence 1 foo foo bar baz bar baz 2 foo bar bar bar baz 3 foo foo foo bar bar baz sequence 1 foo bar baz bar ba

我有一个查询,它使用
array\u agg()
函数生成数组字符串

SELECT 
array_agg(message) as sequence
from mytable
group by id
这将生成一个如下所示的表:

                 sequence
1 foo foo bar baz bar baz
2     foo bar bar bar baz
3 foo foo foo bar bar baz
    sequence
1 foo bar baz bar baz
2 foo bar baz
3 foo bar baz
但我的目标是压缩字符串数组,以便任何字符串都不能在一行中重复一次以上,例如,所需的输出如下所示:

                 sequence
1 foo foo bar baz bar baz
2     foo bar bar bar baz
3 foo foo foo bar bar baz
    sequence
1 foo bar baz bar baz
2 foo bar baz
3 foo bar baz

如何使用Presto SQL实现这一点

您可以通过以下两种方式之一执行此操作:

1) 使用以下函数从生成的阵列中删除重复项:

将mytable(id、消息)作为(值
(1,'foo')、(1,'foo')、(1,'bar')、(1,'bar')、(1,'baz')、(1,'baz'),
(2"foo",(2"bar","2"bar","2"bar","2"bar,
(3,'foo')、(3,'foo')、(3,'foo')、(3,'bar')、(3,'bar')、(3,'baz'))
)
选择array_distinct(array_agg(message))作为序列
从mytable
按id分组
2) 使用聚合中的
DISTINCT
限定符删除重复值,然后再将其传递到array_agg

将mytable(id、消息)作为(值
(1,'foo')、(1,'foo')、(1,'bar')、(1,'bar')、(1,'baz')、(1,'baz'),
(2,'foo')、(2,'bar')、(2,'bar')、(2,'bar')、(2,'baz')、(3,'foo'),
(3,'foo'),(3,'foo'),(3,'bar'),(3,'bar'),(3,'baz'))
)
选择数组_agg(不同消息)作为序列
从mytable
按id分组
两个备选方案产生相同的结果:

    sequence
-----------------
 [foo, bar, baz]
 [foo, bar, baz]
 [foo, bar, baz]
(3 rows)

谢谢你的回答,但我想我没有提到一个要点(我不需要不同的值,而是不重复的连续值)。我修改了第一行数据来说明这一点