所以我有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