所以我有5行这样将多个行插入一个空格分隔字符串
userid, col
--------------
1, a
1, b
2, c
2, d
3, e
我会怎么做查询,使其看起来像这样
userid, combined
1, a b
2, c d
3, e
所以我有5行这样将多个行插入一个空格分隔字符串
userid, col
--------------
1, a
1, b
2, c
2, d
3, e
我会怎么做查询,使其看起来像这样
userid, combined
1, a b
2, c d
3, e
使用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
我目前正在使用Hive,因此我无法按部分方式执行该组,因为GROUP_CONCAT无法识别为聚合函数,无论如何,它都是? – haoxu 2010-09-13 20:47:28
@haoxu:下一个选项(来自SQL预测)将是一个游标和字符串连接,但它需要一个MySQL函数。我对Hive并不熟悉 - 有没有使用本地查询的方法? – 2010-09-13 21:11:46
在HiveQL中提交了GROUP_CONCAT的JIRA请求:https://issues.apache.org/jira/browse/HIVE-1689 – 2010-10-04 11:25:14
我敢肯定,你不能使用蜂巢QL做到这一点。但是,如果您编写自己的Map/Reduce脚本,则应该可以这样做 - 请参阅this tutorial以开始。
答案已过时。较新的版本具有这些功能。 – 2016-07-08 11:07:07
在蜂巢可以使用
SELECT userid, collect_set(combined) FROM tabel GROUP BY user_id;
collect_set删除重复。如果你需要让他们可以检查这个帖子:
正是我想要的!就像一种魅力,通过查询将一行排成一行 – 2012-07-16 20:19:53
SELECT
userid,
concat_ws(" ", collect_set(col)) AS combined
FROM table
GROUP BY userid
几乎完全重复的:http://stackoverflow.com/questions/2885709/sql-concatenate-rows-query – 2010-09-13 19:45:48