首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Presto中压缩数组

在Presto中压缩数组
EN

Stack Overflow用户
提问于 2019-05-29 04:52:57
回答 1查看 4.2K关注 0票数 6

我有一个使用array_agg()函数生成数组字符串的查询

代码语言:javascript
复制
SELECT 
array_agg(message) as sequence
from mytable
group by id

这将生成一个如下所示的表:

代码语言:javascript
复制
                 sequence
1 foo foo bar baz bar baz
2     foo bar bar bar baz
3 foo foo foo bar bar baz

但我的目标是压缩字符串数组,使每个字符串数组在一行中只能重复一次,例如,所需的输出将如下所示:

代码语言:javascript
复制
    sequence
1 foo bar baz bar baz
2 foo bar baz
3 foo bar baz

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-29 05:10:08

您可以通过以下两种方法之一完成此操作:

  1. 使用array_distinct函数从结果数组中删除重复项:

代码语言:javascript
复制
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

  1. 在聚合中使用DISTINCT限定符在将重复值传递到array_agg之前将其删除。

代码语言:javascript
复制
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

这两种替代方法产生相同的结果:

代码语言:javascript
复制
    sequence
-----------------
 [foo, bar, baz]
 [foo, bar, baz]
 [foo, bar, baz]
(3 rows)

更新:您可以使用最近引入的MATCH_RECOGNIZE功能删除重复的元素序列:

代码语言:javascript
复制
WITH mytable(id, message) AS (VALUES
  (1, 'foo'), (1, 'foo'), (1, 'bar'), (1, 'baz'), (1, 'bar'), (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(value) AS sequence
FROM mytable
 MATCH_RECOGNIZE(
    PARTITION BY id
    MEASURES A.message AS value
    PATTERN (A B*)
    DEFINE B AS message = PREV(message)
)
GROUP BY id
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56349907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档