LISTAGG упорядочивает данные, объединенные в группы конструкцией ORDER BY, затем соединяет указаный столбец measure_expr.
1) Как одиночная агрегатная функция, LISTAGG обрабатывает все строки и возвращает одно значение.
2) Как групповая агрегатная функция, LISTAGG обрабатывает и возвращает данные для каждой группы определенной в GROUP BY.
3) Как аналитическая функция, LISTAGG обрабатывает данные разбитые на блоки, задаваемые одним или несколькими выражениями query_partition_clause.
Пример агрегатной функции
SQL> select deptno, LISTAGG(t.ename, ', ') WITHIN GROUP (order by t.empno) as ename_list
2 from scott.emp t
3 group by deptno;
DEPTNO ENAME_LIST
------ --------------------------------------------------------------------------------
10 CLARK, KING, MILLER
20 SMITH, JONES, SCOTT, ADAMS, FORD, SMIT2
30 ALLEN, WARD, MARTIN, BLAKE, TURNER, JAMES
Пример аналитической функции
SQL> select deptno,
2 ename,
3 job,
4 hiredate, listagg(t.ename, ', ')
6 WITHIN GROUP(order by t.empno) over(partition by deptno) as ename_list
7 from scott.emp t
8 where hiredate > to_date('01-01-1982','dd-mm-yyyy');
DEPTNO ENAME JOB HIREDATE ENAME_LIST
------ ---------- --------- ----------- -----------------------
10 MILLER CLERK 23.01.1982 MILLER
20 SCOTT ANALYST 09.12.1982 SCOTT, ADAMS, SMIT2
20 ADAMS CLERK 12.01.1983 SCOTT, ADAMS, SMIT2
20 SMIT2 CLERK 25.07.2011 SCOTT, ADAMS, SMIT2
Oracle Database SQL Language Reference 11g Release 2 : LISTAGG
Последние комментарии