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