14

所以我有5行这样

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

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

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

4 回答 4

44

在蜂巢中,您可以使用

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

collect_set 删除重复的。如果您需要保留它们,可以查看此帖子:

Hive 中的 COLLECT_SET(),保留重复项?

于 2012-02-29T19:59:21.757 回答
14

使用GROUP_CONCAT 聚合函数

  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
于 2010-09-13T19:37:12.900 回答
2
  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
于 2019-01-03T06:25:05.653 回答
2
SELECT 
  userid,
  concat_ws(" ", collect_set(col)) AS combined
FROM table 
GROUP BY userid
于 2017-01-22T06:16:26.710 回答