Как объединить значения строк через string_agg в PostgreSQL

Как объединить значения строк через string_agg в PostgreSQL
Содержание статьи

string_agg собирает ненулевые текстовые значения в одну строку. Чтобы порядок был определён, задайте ORDER BY внутри вызова агрегата. В разборе Mentoring.digital используем небольшой учебный набор, заданный прямо в запросе.

Текст по группам и порядок внутри результата

WITH sample(team, name) AS (
  VALUES ('api', 'Oleg'),
         ('api', 'Anna'),
         ('api', NULL),
         ('web', 'Ira')
)
SELECT team,
       string_agg(name, ', ' ORDER BY name) AS names
FROM sample
GROUP BY team
ORDER BY team;

Внутренний ORDER BY name задаёт порядок значений в строке. Внешний ORDER BY team сортирует строки результата по группам. Он не заменяет сортировку аргументов агрегата.

Правило сравнения текста зависит от используемого collation. Если нужен конкретный порядок символов, согласуйте его отдельно, а не полагайтесь на случайный порядок чтения таблицы.

Повторы, NULL и пустая строка

Если повторяющееся значение должно присутствовать один раз, можно использовать DISTINCT. Сначала решите, действительно ли повторы лишние: два одинаковых имени могут относиться к разным записям.

WITH sample(name) AS (
  VALUES ('Anna'), ('Anna'), (NULL), ('Oleg')
)
SELECT string_agg(DISTINCT name, ', ' ORDER BY name)
FROM sample;

NULL пропускается, а пустая строка остаётся значением. При отсутствии ненулевых значений результат будет NULL. Замену на пустую строку через coalesce стоит делать только по требованиям вывода.

Что проверить перед использованием

Для упражнения добавьте повтор, пустую строку и группу только с NULL. Проверьте разделитель и убедитесь, что выбранный порядок соответствует ожидаемому отображению.

Строка с запятыми сама по себе не становится корректным CSV: значения могут содержать запятые, кавычки и переводы строк. Если цель состоит в выгрузке файла, используйте подходящий механизм экспорта с правилами экранирования.

Агрегаты и группировку изучают на курсах SQL. Выбрать форму результата запроса можно с наставником по SQL.

Похожие статьи по данной теме