Presto中的压缩阵列

the_darkside

我有一个查询,使用它们的array_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

如何使用Presto SQL做到这一点?

马丁·特拉沃索

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

1)使用以下array_distinct函数从结果数组中删除重复项

WITH mytable(id, message) AS (VALUES
  (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')
)
SELECT array_distinct(array_agg(message)) AS sequence
FROM mytable
GROUP BY id

2)DISTINCT在传递给array_agg之前,使用聚合中限定符删除重复的值。

WITH mytable(id, message) AS (VALUES
  (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')
)
SELECT array_agg(DISTINCT message) AS sequence
FROM mytable
GROUP BY id

两种选择都产生相同的结果:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章