LISTAGG
Версии сервера
| 2.5 | 3.0 | 4.0 | 5.0 | 6.0 |
|---|---|---|---|---|
| − | − | − | − | Да |
Доступно в
Формат
LISTAGG([ALL] expression [, separator])
[WITHIN GROUP (ORDER BY order_expression)]
Описание
Агрегатная функция LISTAGG конкатенирует значения аргумента: возвращает строку из значений выражения, отличных от NULL, в группе, разделённых запятой или заданным разделителем. Если значений, отличных от NULL, нет (включая пустую группу), возвращается NULL. Тип результата — BLOB.
Устаревший синтаксис LIST сохранён для обратной совместимости и является синонимом LISTAGG. В новых проектах рекомендуется LISTAGG — она совместима со стандартом SQL.
Ключевое слово ALL перед выражением (по умолчанию) обрабатывает все значения, отличные от NULL; DISTINCT удаляет дубликаты — кроме случая, когда выражение является BLOB.
Необязательный separator — любое строковое выражение (например, ascii_char(13)); по умолчанию — запятая. Аргументы поддерживают BLOB любого размера и набора символов; даты и числа неявно приводятся к строке. Результат — текстовый BLOB, кроме случая, когда выражение является BLOB другого подтипа.
Порядок значений задаётся опцией WITHIN GROUP (ORDER BY ...); без неё порядок конкатенации не определён. При указании DISTINCT сортировка в WITHIN GROUP игнорируется, кроме случая, когда агрегированное выражение стоит первым в списке сортировки — тогда направление сортировки учитывается внутри DISTINCT.
Предусмотренное стандартом предложение ON OVERFLOW (обработка переполнения) не реализовано: LISTAGG всегда возвращает BLOB, так что переполнения не бывает, и при указании опция молча игнорируется.
Функция появилась в Firebird 6.0 — версия в разработке, доступны снапшот-сборки.
Пример
Список в алфавитном порядке с заданным разделителем:
SELECT LISTAGG(display_name, '; ') WITHIN GROUP (ORDER BY display_name)
FROM GR_WORK;
Группировка с сортировкой по убыванию:
SELECT
work_type,
LISTAGG(display_name, '; ') WITHIN GROUP (ORDER BY display_name DESC) AS works
FROM GR_WORK
GROUP BY work_type;
См. также
COALESCE, Встроенные функции по группам
Источник
Руководство по языку SQL СУБД Firebird 6.0 (sim1984 / ibase.ru, Public Documentation License)
Обсуждение