Някои RDBMS като MySQL и MariaDB имат GROUP_CONCAT() функция, която ви позволява да върнете колона на заявка като разделен списък (например списък, разделен със запетая).
PostgreSQL има подобна функция, наречена STRING_AGG() . Тази функция работи почти по същия начин като GROUP_CONCAT() работи в MySQL и MariaDB.
Пример
Ето основен пример, за да демонстрирате как STRING_AGG() на PostgreSQL функция работи:
SELECT STRING_AGG(genre, ',') FROM Genres; Резултат:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Ето какво се случва, когато просто направим заявката без STRING_AGG() функция:
SELECT genre FROM Genres; Резултат:
+---------+ | genre | +---------+ | Rock | | Jazz | | Country | | Pop | | Blues | | Hip Hop | | Rap | | Punk | +---------+ (8 rows)
Получаваме осем реда, всеки с отделна стойност, вместо един дълъг ред, разделен със запетая, от всички стойности.
Ако не друго, STRING_AGG() на PostgreSQL е по-скоро като GROUP_CONCAT() на MySQL отколкото едноименната функция на MariaDB. Казвам това, защото GROUP_CONCAT() на MariaDB ни позволява да предоставим LIMIT клауза (от MariaDB 10.3.3), направо от самата функция. MySQL GROUP_CONCAT() не поддържа LIMIT клауза, както и STRING_AGG() на PostgreSQL функция (поне не към момента на писане).
Друга разлика е, че STRING_AGG() на PostgreSQL изисква втори аргумент (който определя разделителя за използване). И MySQL, и MariaDB правят това по избор със своя GROUP_CONCAT() функции.
STRING_AGG() на Postgres приема ORDER BY клауза и DISTINCT клауза (както и GROUP_CONCAT() на MariaDB и MySQL функции).
Вижте STRING_AGG() Функция в PostgreSQL за повече примери.
И в случай, че се интересувате, SQL Server също има STRING_AGG() функция, която работи почти по същия начин.