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

ARRAY_AGG

Аналог в MySQL:

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

PostgreSQL 17.5
ARRAY_AGG([DISTINCT] expression [ORDER BY ...])

Параметры

DISTINCTключевое словонеобязательный
Собирать только уникальные значения
expression
Выражение, значения которого собираются в массив
ORDER BYнеобязательный
Порядок элементов в массиве

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

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

Примеры

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

PostgreSQL 17.5
SELECT ARRAY_AGG(
		n
		ORDER BY n DESC
	)
FROM GENERATE_SERIES(1, 5) AS n;
array_agg
54321

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

PostgreSQL 17.5
SELECT status,
	ARRAY_AGG(member_name) AS members
FROM FamilyMembers
GROUP BY status
ORDER BY status;
statusmembers
daughterLela QuinceyAnnie QuinceyWednesday Addams
fatherHeadley QuinceyErnest Forrest
motherFlavia QuinceyConstance Forrest
sonAndie Quincey

Подробности

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

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

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