Вопрос

По сути, вопрос в том, как извлечь из этого пользу:

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;

Надеюсь, это поможет кому-то еще

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top