将多行组合成一个空格分隔的字符串

hao*_*oxu 13 mysql sql hive

所以我有这样的5行

userid, col
--------------
1, a
1, b
2, c
2, d
3, e
Run Code Online (Sandbox Code Playgroud)

我该怎么做查询,所以它看起来像这样

userid, combined
1, a b
2, c d
3, e
Run Code Online (Sandbox Code Playgroud)

小智 42

在蜂巢中你可以使用

SELECT userid, collect_set(combined) FROM tabel GROUP BY user_id;
Run Code Online (Sandbox Code Playgroud)

collect_set删除重复的.如果你需要保留它们,你可以查看这篇文章:

在Hive中收集COLLECT_SET(),保留重复项?

  • 正是我想要的!就像通过查询从组中连接一行的魅力一样 (2认同)

OMG*_*ies 14

使用GROUP_CONCAT聚合函数:

  SELECT yt.userid,
         GROUP_CONCAT(yt.col SEPARATOR ' ') AS combined
    FROM YOUR_TABLE yt
GROUP BY yt.userid
Run Code Online (Sandbox Code Playgroud)

默认分隔符是逗号(","),因此您需要指定单个空格的SEPARATOR以获得所需的输出.

如果要确保GROUP_CONCAT中值的顺序,请使用:

  SELECT yt.userid,
         GROUP_CONCAT(yt.col ORDER BY yt.col SEPARATOR ' ') AS combined
    FROM YOUR_TABLE yt
GROUP BY yt.userid
Run Code Online (Sandbox Code Playgroud)

  • GROUP_CONCAT实际上并不存在于Hive中......此解决方案仅适用于MySQL. (2认同)