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