Справочник по функциям

STRING_AGG

Аналог в MySQL:

Объединяет значения из группы строк в одну строку через разделитель.

PostgreSQL 17.5
STRING_AGG([DISTINCT] expression, delimiter [ORDER BY ...])

Параметры

DISTINCTключевое словонеобязательный
Объединять только уникальные значения
expressiontext
Текстовое выражение, значения которого объединяются; число нужно привести к тексту
delimitertext
Разделитель между значениями
ORDER BYнеобязательный
Порядок значений в строке, пишется после delimiter без запятой

Возвращаемое значение

Строка (text); NULL пропускаются, NULL, если все значения равны NULL

Примеры

Все имена через запятую

PostgreSQL 17.5
SELECT STRING_AGG(member_name, ', ')
FROM FamilyMembers;
string_agg
Headley Quincey, Flavia Quincey, Andie Quincey, Lela Quincey, Annie Quincey, Ernest Forrest, Constance Forrest, Wednesday Addams

Имена по статусам по алфавиту

PostgreSQL 17.5
SELECT status,
	STRING_AGG(
		member_name,
		', '
		ORDER BY member_name
	) AS members
FROM FamilyMembers
GROUP BY status
ORDER BY status;
statusmembers
daughterAnnie Quincey, Lela Quincey, Wednesday Addams
fatherErnest Forrest, Headley Quincey
motherConstance Forrest, Flavia Quincey
sonAndie Quincey

Числа через ::text и уникальные статусы

PostgreSQL 17.5
SELECT STRING_AGG(
		member_id::text,
		','
		ORDER BY member_id
	) AS ids,
	STRING_AGG(DISTINCT status, ', ') AS statuses
FROM FamilyMembers;
idsstatuses
1,2,3,4,5,6,7,8daughter, father, mother, son

Подробности

Значения должны быть текстом: STRING_AGG(member_id, ',') вызовет ошибку, а STRING_AGG(member_id::text, ',') сработает.

Без ORDER BY порядок значений не гарантирован и может меняться от запуска к запуску. Вместе с DISTINCT в ORDER BY можно указать только само expression.

Смотрите также