在 PrestoSQL 中将行组合成列表

Combine rows into a list in PrestoSQL

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

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

如果 id1 的值和 id2 的值对于任意数量的行都是相同的,我想合并这些行,以便 actions 字段成为一个列表细绳。如果 none 行具有相同的 id1 值和相同的 id2 值,我仍想将 actions 字段转换为列表,但仅使用一个字符串。例如,查询的输出应如下所示:

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

我知道 Presto 的一些基础知识,可以根据条件连接列,但不确定是否可以通过查询实现。如果可以实现,那么推进此逻辑实施的好方法是什么?

尝试将 ARRAY_JOINARRAY_AGG 结合使用:

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

如果你想将结果作为数组,你可以使用 flatten 而不是 array_join:

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