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

ARRAY_AGG

Аналог в MySQL:

Собирает значения из группы строк в массив.

PostgreSQL 17.9
ARRAY_AGG([DISTINCT] expression [ORDER BY sort_expression [ASC | DESC] [NULLS FIRST | NULLS LAST]])
  • [ ]необязательная часть
  • a | bодин из вариантов
DISTINCT
Собирать только уникальные значения
Ключевое словоНеобязательный
expression
Выражение, значения которого собираются в массив
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

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

Массив значений того же типа, включая NULL; для пустого набора — NULL

Примеры

Числа в массив по убыванию

PostgreSQL 17.9
SELECT ARRAY_AGG(
		n
		ORDER BY n DESC
	)
FROM GENERATE_SERIES(1, 5) AS n;
array_agg
[5,4,3,2,1]

Имена по статусам с GROUP BY

PostgreSQL 17.9
SELECT status,
	ARRAY_AGG(member_name) AS members
FROM FamilyMembers
GROUP BY status
ORDER BY status;
statusmembers
daughter["Lela Quincey","Annie Quincey","Wednesday Addams"]
father["Headley Quincey","Ernest Forrest"]
mother["Flavia Quincey","Constance Forrest"]
son["Andie Quincey"]

Подробности

В отличие от STRING_AGG, ARRAY_AGG не пропускает NULL: такие значения тоже попадают в массив.

Элементы массива нумеруются с 1: выражение (ARRAY_AGG(member_name ORDER BY birthday))[1] вернёт имя самого старшего члена семьи.

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