Используя MySQL
, я могу сделать что-то вроде:
SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;
Мой вывод:
shopping
fishing
coding
но вместо этого я просто хочу 1 ряд, 1 столбец:
Ожидаемый результат:
shopping, fishing, coding
Причина в том, что я выбираю несколько значений из нескольких таблиц, и после всех объединений у меня намного больше строк, чем хотелось бы.
Я искал функцию в MySQL Doc, и это не похоже на то, что CONCAT
или CONCAT_WS
функции принимают наборы результатов.
Так кто-нибудь здесь знает, как это сделать?
mysql
sql
concat
group-concat
Дин Ратер
источник
источник
Ответы:
Вы можете использовать
GROUP_CONCAT
:Как сказал Людвиг в своем комментарии, вы можете добавить
DISTINCT
оператор, чтобы избежать дублирования:Как сказал Ян в своем комментарии, вы также можете отсортировать значения перед их развертыванием, используя
ORDER BY
:Как отметил Даг в своем комментарии, на результат накладывается ограничение в 1024 байта. Чтобы решить эту проблему, запустите этот запрос перед вашим запросом:
Конечно, вы можете изменить в
2048
соответствии с вашими потребностями. Чтобы рассчитать и присвоить значение:источник
DISTINCT
параметр, вы не получите никаких двойников.... GROUP_CONCAT(DISTINCT hobbies)
SELECT person_id, GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ') FROM peoples_hobbies GROUP BY person_id
Посмотрите,
GROUP_CONCAT
поддерживает ли ваша версия MySQL (4.1) это. Смотрите документацию для более подробной информации.Это будет выглядеть примерно так:
источник
group by 'all'
это не обязательно (более того, нежелательно), потому что это назначить для всех строк строки,all
а затем сравнить строки между этими строками. Я прав?Альтернативный синтаксис для объединения нескольких отдельных строк
ВНИМАНИЕ: этот пост сделает вас голодным.
Данный:
Я обнаружил, что хочу выбрать несколько отдельных строк вместо группы - и объединить в определенном поле.
Допустим, у вас есть таблица идентификаторов продуктов, их названий и цен:
Тогда у вас есть какой-нибудь необычный аякс, который перечисляет этих щенков как флажки.
Ваш голодный бегемотик выбирает
13, 15, 16
. Сегодня для нее нет десерта ...Найти:
Способ суммировать заказ вашего пользователя в одну строку, с чистым mysql.
Решение:
Используйте
GROUP_CONCAT
с вIN
статье :Какие выводы:
Бонусное решение:
Если вы тоже хотите узнать общую стоимость, введите
SUM()
:PS: Извиняюсь, если у вас нет In-N-Out поблизости ...
источник
Вы можете изменить максимальную длину
GROUP_CONCAT
значения, установивgroup_concat_max_len
параметр.Подробности смотрите в документации MySQL .
источник
Есть агрегатная функция GROUP, GROUP_CONCAT .
источник
В моем случае у меня был ряд идентификаторов, и было необходимо привести его к типу char, в противном случае результат был закодирован в двоичном формате:
источник
CAST
меня были значения, как[BLOB - 14 Bytes]
в результате!Используйте переменную сеанса MySQL (5.6.13) и оператор присваивания, как показано ниже
тогда вы можете получить
источник
SELECT @logmsg := CONCAT_ws(',',@logmsg,description) from test
У меня был более сложный запрос, и я обнаружил, что мне нужно использовать
GROUP_CONCAT
внешний запрос, чтобы заставить его работать:Оригинальный запрос:
интегрировалась:
Надеюсь, это может кому-то помочь.
источник
Для тех, кто ищет здесь, как использовать
GROUP_CONCAT
с подзапросом - опубликовать этот примерТак что
GROUP_CONCAT
нужно использовать внутри подзапроса, а не оборачивать его.источник
Попробуй это:
источник
у нас есть два способа объединить столбцы в MySql
Или
источник