В этом учебном пособии вы узнаете, как использовать Oracle/PLSQL функцию LISTAGG с синтаксисом и примерами.
Описание
Oracle/PLSQL функция LISTAGG объединяет значения measure_column для каждой группы на основе order_by_clause.
Синтаксис
Синтаксис Oracle/PLSQL функции LISTAGG:
WITHIN GROUP (order_by_clause) [OVER query_partition_clause]
Параметры или аргументы
measure_column столбец, значения которого вы хотите объединить вместе в наборе результатов. Нулевые значения в measure_column игнорируются.
delimiter не является обязательным. Это разделитель используется при разделении значений measure_column при выводе результатов.
order_by_clause определяет порядок связанных значении (т.е.: measure_column) которые возвращаются.
Функция LISTAGG возвращает string значение.
Применение
Функцию LISTAGG можно использовать в следующих версиях Oracle/PLSQL:
- Oracle 12c, Oracle 11g Release 2
Пример
Функция LISTAGG может быть использована в Oracle/PLSQL.
Так как это более сложная функция, то чтобы ее понять, давайте посмотрим на примере, который включает данные, которые функция демонстрирует на выходе.
Если у вас есть таблица products со следующими данными:
PRODUCT_ID | PRODUCT_NAME |
---|---|
1001 | Bananas |
1002 | Apples |
1003 | Pears |
1004 | Oranges |
И вы выполните следующий SQL запрос, используя функцию LISTAGG:
1 2 |
SELECT LISTAGG(product_name, ', ') WITHIN GROUP (ORDER BY product_name) "Product_Listing" FROM products; |
То получите следующий результат:
Product_Listing |
---|
Apples, Bananas, Oranges, Pears |
В этом примере, результат функции LISTAGG выведется в одном поле со значениями, разделенными запятыми.
Вы можете изменить сортировку, используя ключевое слово DESC и изменить запрос SELECT следующим образом:
1 2 |
SELECT LISTAGG(product_name, ', ') WITHIN GROUP (ORDER BY product_name DESC) "Product_Listing" FROM products; |
Получим следующий результат:
Product_Listing |
---|
Pears, Oranges, Bananas, Apples |
Вы можете изменить разделитель запятую на точку с запятой следующим образом:
1 2 |
SELECT LISTAGG(product_name, '; ') WITHIN GROUP (ORDER BY product_name DESC) "Product_Listing" FROM products; |
Эти изменения выразятся следующим образом:
Product_Listing |
---|
Pears; Oranges; Bananas; Apples |