在 PrestoSQL 中将行合并为一个列表

Tel*_*nce 7 presto trino

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

id1   |   id2  |   actions
---------------------------
"a1"      "a2"     "action1"
"b1"      "b2"     "action2"
"a1"      "a2"     "action3"
Run Code Online (Sandbox Code Playgroud)

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

id1   |   id2  |   actions
---------------------------
"a1"      "a2"     ["action1", "action3"]
"b1"      "b2"     ["action2"]
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*sen 12

尝试使用ARRAY_JOINARRAY_AGG

SELECT
    id1,
    id2,
    ARRAY_JOIN(ARRAY_AGG(actions), ',') actions
FROM yourTable
GROUP BY
    id1,
    id2;
Run Code Online (Sandbox Code Playgroud)

  • `ARRAY_JOIN(ARRAY_AGG(` 这改变了顺序。你知道如何解决它吗?,在 a1 的这个问题中,我想保持顺序,所以联系人应该是 `action1,action2` 但很多时候我得到了错误的订单,比如`动作2,动作1` (2认同)
  • 如果你想保持顺序请参考`array_agg(x ORDER BY y DESC)` (2认同)