


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. Если нужен конкретный порядок символов, согласуйте его отдельно, а не полагайтесь на случайный порядок чтения таблицы.
Если повторяющееся значение должно присутствовать один раз, можно использовать 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.