В MariaDB можем да използваме GROUP_CONCAT()
функция, за да върне резултатите от нашата заявка като списък, разделен със запетая. Под това имам предвид, че за дадена колона можем да преобразуваме всички редове в един ред, който съдържа разделен със запетая списък със стойностите, съставляващи тази колона. Всеки ред е отделен елемент в списъка.
Пример
Да предположим, че изпълняваме следната заявка:
SELECT meal
FROM guest_meals;
Резултат:
+---------+ | meal | +---------+ | Salad | | Fish | | Burrito | | Pasta | | Salad | | Salad | +---------+ 6 rows in set (0.001 sec)
Тази заявка доведе до шест реда.
Можем да преобразуваме тези редове в един ред, разделен със запетая, както следва:
SELECT GROUP_CONCAT(meal)
FROM guest_meals;
Резултат:
+--------------------------------------+ | GROUP_CONCAT(meal) | +--------------------------------------+ | Salad,Fish,Burrito,Pasta,Salad,Salad | +--------------------------------------+ 1 row in set (0.003 sec)
Променете разделителя
Можем да посочим собствен разделител, като го предадем на функцията с префикс SEPARATOR
ключова дума:
SELECT GROUP_CONCAT(meal SEPARATOR ' + ')
FROM guest_meals;
Резултат:
Salad + Fish + Burrito + Pasta + Salad + Salad
Поръчване на резултатите
Можем да поръчаме резултатите, като използваме ORDER BY
клауза във функцията:
SELECT GROUP_CONCAT(meal ORDER BY meal ASC)
FROM guest_meals;
Резултат:
Burrito,Fish,Pasta,Salad,Salad,Salad
Връщане само на уникални стойности
Можем да използваме DISTINCT
клауза за връщане само на уникални стойности:
SELECT GROUP_CONCAT(DISTINCT meal ORDER BY meal ASC)
FROM guest_meals;
Резултат:
Burrito,Fish,Pasta,Salad
Ограничете резултатите
Можем да използваме LIMIT
клауза за ограничаване на броя на елементите в списъка:
SELECT GROUP_CONCAT(DISTINCT meal ORDER BY meal ASC LIMIT 3)
FROM guest_meals;
Резултат:
Burrito,Fish,Pasta
Групирани заявки
GROUP_CONCAT()
функцията може да бъде удобна при изпълнение на групирани заявки. Вижте MariaDB GROUP_CONCAT()
за пример.