Morozov&Pimnev blog

Полезные решения, шпаргалки и примеры по html, css, js, jQuery, MySQL, PHP, HostCMS, ssh.

Интересная функция GROUP_CONCAT() в MySQL

GROUP_CONCAT() эта функция возвращает строку с результатом объедененных ненулевых значений (non-NULL) из группы. Возвращает значение NULL, если нет ненулевых значений.

Например у нас есть слудующие значения в таблице:

mysql> select * from users;
+----+-----------------------+------------+
| id | name                  | surname    |
+----+-----------------------+------------+
|  1 | Иван                  | Петров     |
|  2 | Иван                  | Иванов     |
|  3 | Петр                  | Первый     |
|  4 | Петр                  | Второй     |
|  5 | Семен                 | Слипаков   |
+----+-----------------------+------------+

И нам нужно узнать сколько разновидностей фамилий у имени, т.е. мы группируем по имени и объеденяем поле фамилии и получаем нужный нам результат:

mysql> SELECT name, surname GROUP_CONCAT(DISTINCT surname ORDER BY surname ASC SEPARATOR ', ') AS surname
    -> FROM users
    -> GROUP BY name;
+----+-----------------------+--------------------+
| id | name                  | surname            |
+----+-----------------------+--------------------+
|  1 | Иван                  | Иванов, Петров     |
|  2 | Петр                  | Второй, Первый     |
|  3 | Семен                 | Слипаков           |
+----+-----------------------+--------------------+

DISTINCT — позволяет выбрать уникальные значения, т.е. без дублей;
ORDER BY column ASC | DESC — позволяет сортировать данные;
SEPARATOR — позволяет разделить данные через нужный делитель, по-умолчанию это запятая без пробела (,)

mysql, sql