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

时间:2010-09-13 19:34:24

标签: sql mysql hive

所以我有5行像这样

userid, col
--------------
1, a
1, b
2, c
2, d
3, e

我将如何进行查询,使其看起来像这样

userid, combined
1, a b
2, c d
3, e

5 个答案:

答案 0 :(得分:42)

在蜂巢中你可以使用

SELECT userid, collect_set(combined) FROM tabel GROUP BY user_id;

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

COLLECT_SET() in Hive, keep duplicates?

答案 1 :(得分:14)

使用GROUP_CONCAT aggregate function

  SELECT yt.userid,
         GROUP_CONCAT(yt.col SEPARATOR ' ') AS combined
    FROM YOUR_TABLE yt
GROUP BY yt.userid

默认分隔符是逗号(“,”),因此您需要指定单个空格的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

答案 2 :(得分:3)

SELECT 
  userid,
  concat_ws(" ", collect_set(col)) AS combined
FROM table 
GROUP BY userid

答案 3 :(得分:0)

  1. MySQL,重复项:select col1, group_concat(col2) from table1 group by col1
  2. MySQL,无重复:select col1, group_concat(distinct col2) from table1 group by col1
  3. Hive,重复项:select col1, collect_list(col2) from table1 group by col1
  4. Hive,无重复:select col1, collect_set(col2) from table1 group by col1

答案 4 :(得分:-6)

我很确定你不能使用Hive QL来做到这一点。但是,如果您编写自己的Map / Reduce脚本,应该可以这样做 - 请参阅this tutorial以开始使用。