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;Имена по статусам с GROUP BY
PostgreSQL 17.9
SELECT status,
ARRAY_AGG(member_name) AS members
FROM FamilyMembers
GROUP BY status
ORDER BY status;Подробности
В отличие от STRING_AGG, ARRAY_AGG не пропускает NULL: такие значения тоже попадают в массив.
Элементы массива нумеруются с 1: выражение (ARRAY_AGG(member_name ORDER BY birthday))[1] вернёт имя самого старшего члена семьи.