将行合并到PrestoSQL中的列表中

时间:2019-03-27 05:13:48

标签: presto

当前,我的表具有三个不同的字段,id1id2actionsaction是字符串类型。例如,我的表看起来像下面给出的表:

id1   |   id2  |   actions
---------------------------
"a1"      "a2"     "action1"
"b1"      "b2"     "action2"
"a1"      "a2"     "action3"

如果id1的值和id2的值对于任何数目的行都是相同的,我想合并这些行,以使actions字段成为字符串列表。如果没有行具有id1的相同值和id2的相同值,我仍然希望将actions字段转换为列表,但只能使用一个字符串。例如,查询的输出应类似于以下内容:

id1   |   id2  |   actions
---------------------------
"a1"      "a2"     ["action1", "action3"]
"b1"      "b2"     ["action2"]

我了解Presto的一些基础知识,可以根据条件加入列,但不确定是否可以通过查询来实现。如果能够做到这一点,那么执行此逻辑的一个好的方法是什么?

2 个答案:

答案 0 :(得分:1)

尝试将ARRAY_JOINARRAY_AGG一起使用:

SELECT
    id1,
    id2,
    ARRAY_JOIN(ARRAY_AGG(actions), ',') actions
FROM yourTable
GROUP BY
    id1,
    id2;

答案 1 :(得分:0)

如果要将结果作为数组,则可以使用flatten代替array_join:

select   
    id1,  id2,   flatten(array_agg(actions)) as actions  
from table  
group by id1, id2