Как использовать GROUP BY для объединения строк в MySQL?
-
02-07-2019 - |
Вопрос
По сути, вопрос в том, как извлечь из этого пользу:
id string 1 A 1 B 2 C
к этому:
id string 1 A B 2 C
Решение
SELECT id, GROUP_CONCAT(string SEPARATOR ' ') FROM table GROUP BY id;
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
По ссылке выше, GROUP_CONCAT
:Эта функция возвращает строковый результат с объединенными ненулевыми значениями из группы.Он возвращает значение NULL, если нет ненулевых значений.
Другие советы
SELECT id, GROUP_CONCAT( string SEPARATOR ' ') FROM table GROUP BY id
Более подробная информация здесь.
По ссылке выше, GROUP_CONCAT
:Эта функция возвращает строковый результат с объединенными ненулевыми значениями из группы.Он возвращает значение NULL, если нет ненулевых значений.
SELECT id, GROUP_CONCAT(CAST(string as CHAR)) FROM table GROUP BY id
Выдаст вам строку, разделенную запятыми
SET group_concat_max_len=100000000
SELECT id, GROUP_CONCAT(string SEPARATOR ' ') FROM table GROUP BY id;
:- В MySQL вы можете получить объединенные значения комбинаций выражений .Чтобы исключить дублирование значений, используйте ОТЧЕТЛИВЫЙ оговорка.Чтобы отсортировать значения в результате, используйте предложение ORDER BY.Для сортировки в обратный порядок, добавить ДЕСК ключевое слово (по убыванию) к названию столбца, по которому вы сортируете, в предложении ORDER BY.По умолчанию используется порядок возрастания;это может быть указано явно с помощью ключевого слова ASC.Разделителем по умолчанию между значениями в группе является запятая (“,”).Чтобы явно указать разделитель, используйте РАЗДЕЛИТЕЛЬ, за которым следует строковое буквальное значение, которое должно быть вставлено между значениями группы.Чтобы полностью исключить разделитель, укажите СЕПАРАТОР ".
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
или
mysql> SELECT student_name,
-> GROUP_CONCAT(DISTINCT test_score
-> ORDER BY test_score DESC SEPARATOR ' ')
-> FROM student
-> GROUP BY student_name;
Отличные ответы.У меня также была проблема с NULLS, и мне удалось решить ее, включив COALESCE внутри GROUP_CONCAT.Пример выглядит следующим образом:
SELECT id, GROUP_CONCAT(COALESCE(string,'') SEPARATOR ' ')
FROM table
GROUP BY id;
Надеюсь, это поможет кому-то еще