Combine multiple rows into one space separated string

后端 未结 4 677
时光取名叫无心
时光取名叫无心 2020-12-30 05:05

So I have 5 rows like this

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

How would I do query so it will look like this



        
相关标签:
4条回答
  • 2020-12-30 05:33

    Use the GROUP_CONCAT aggregate function:

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

    The default separator is a comma (","), so you need to specify the SEPARATOR of a single space to get the output you desire.

    If you want to ensure the order of the values in the GROUP_CONCAT, use:

      SELECT yt.userid,
             GROUP_CONCAT(yt.col ORDER BY yt.col SEPARATOR ' ') AS combined
        FROM YOUR_TABLE yt
    GROUP BY yt.userid
    
    0 讨论(0)
  • 2020-12-30 05:36

    In hive you can use

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

    collect_set removes duplicated. If you need to keep them you can check this post:

    COLLECT_SET() in Hive, keep duplicates?

    0 讨论(0)
  • 2020-12-30 05:38
    SELECT 
      userid,
      concat_ws(" ", collect_set(col)) AS combined
    FROM table 
    GROUP BY userid
    
    0 讨论(0)
  • 2020-12-30 05:42
    1. MySQL with duplicates: select col1, group_concat(col2) from table1 group by col1
    2. MySQL without duplicates: select col1, group_concat(distinct col2) from table1 group by col1
    3. Hive with duplicates: select col1, collect_list(col2) from table1 group by col1
    4. Hive without duplicates: select col1, collect_set(col2) from table1 group by col1
    0 讨论(0)
提交回复
热议问题