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;Имена по статусам по алфавиту
PostgreSQL 17.9
SELECT status,
STRING_AGG(
member_name,
', '
ORDER BY member_name
) AS members
FROM FamilyMembers
GROUP BY status
ORDER BY status;Числа через ::text и уникальные статусы
PostgreSQL 17.9
SELECT STRING_AGG(
member_id::text,
','
ORDER BY member_id
) AS ids,
STRING_AGG(DISTINCT status, ', ') AS statuses
FROM FamilyMembers;Подробности
Значения должны быть текстом: STRING_AGG(member_id, ',') вызовет ошибку, а STRING_AGG(member_id::text, ',') сработает.
Вместе с DISTINCT sort_expression должно совпадать с expression.