在 PrestoSQL 中将行组合成列表
Combine rows into a list in PrestoSQL
目前,我的 table 有三个不同的字段,id1
、id2
和 actions
。 action
是字符串类型。例如,我的 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_JOIN
与 ARRAY_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
目前,我的 table 有三个不同的字段,id1
、id2
和 actions
。 action
是字符串类型。例如,我的 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_JOIN
与 ARRAY_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