Объедините несколько строк в одну строку, разделенную пробелом

Итак, у меня есть 5 строк, как это

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

Как бы я сделал запрос, чтобы он выглядел так

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

person haoxu    schedule 13.09.2010    source источник
comment
Почти точная копия: stackoverflow.com/questions/2885709/sql-concatenate -строки-запрос   -  person Mark Byers    schedule 13.09.2010


Ответы (3)


Используйте агрегатную функцию GROUP_CONCAT. :

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

Разделителем по умолчанию является запятая (","), поэтому вам нужно указать РАЗДЕЛИТЕЛЬ одного пробела, чтобы получить желаемый результат.

Если вы хотите обеспечить порядок значений в GROUP_CONCAT, используйте:

  SELECT yt.userid,
         GROUP_CONCAT(yt.col ORDER BY yt.col SEPARATOR ' ') AS combined
    FROM YOUR_TABLE yt
GROUP BY yt.userid
person OMG Ponies    schedule 13.09.2010
comment
В настоящее время я использую Hive, поэтому я не могу выполнить группировку по частям, потому что GROUP_CONCAT не распознается как функция агрегации, так или иначе? - person haoxu; 14.09.2010
comment
@haoxu: Следующим вариантом (с точки зрения SQL) будет курсор и конкатенация строк, но для этого потребуется функция MySQL. Я не знаком с Hive - нельзя ли использовать собственный запрос? - person OMG Ponies; 14.09.2010
comment
Подал запрос JIRA для GROUP_CONCAT в HiveQL: issues.apache.org/jira/browse/HIVE -1689 - person Jeff Hammerbacher; 04.10.2010
comment
GROUP_CONCAT на самом деле еще не существует в Hive... Это решение применимо только к MySQL. - person thatha; 27.10.2012
comment
Привет, я тестирую то же самое на sql lite sqliteonline.com GROUP_CONCAT не работает - person BdEngineer; 16.06.2017

В улье вы можете использовать

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

collect_set удаляет дубликаты. Если вам нужно сохранить их, вы можете проверить этот пост:

COLLECT_SET() в Hive, сохранить дубликаты?

person PanchaGil    schedule 29.02.2012
comment
именно то, что я хотел! работает как шарм, чтобы объединить строку из группы по запросу - person dev_nut; 17.07.2012

  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
person Safwan    schedule 03.01.2019