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

STRING_AGG

Аналог в MySQL:

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

PostgreSQL 17.9
STRING_AGG([DISTINCT] expression, delimiter [ORDER BY sort_expression [ASC | DESC] [NULLS FIRST | NULLS LAST]])
  • [ ]необязательная часть
  • a | bодин из вариантов
DISTINCT
Объединять только уникальные значения
Ключевое словоНеобязательный
expression
Текстовое выражение, значения которого объединяются; число нужно привести к тексту
text
delimiter
Разделитель между значениями
text
ORDER BY sort_expression [ASC | DESC] [NULLS FIRST | NULLS LAST]
Порядок значений, без него — произвольный
Необязательный
sort_expression
Столбец или выражение для сортировки
ASC | DESC
Направление, по умолчанию ASC
Ключевое словоНеобязательный
ASCDESC
NULLS FIRST | NULLS LAST
Место NULL, по умолчанию в конце при ASC и в начале при DESC
Ключевое словоНеобязательный
NULLS FIRSTNULLS LAST

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

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

Примеры

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

PostgreSQL 17.9
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.9
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.9
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, ',') сработает.

Вместе с DISTINCT sort_expression должно совпадать с expression.

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