LISTAGG Oracle function of
Recently in the learning process, I found a very interesting function, which can be realized splicing column values. Let us look at the specific usage.
usage:
Its role, the official interpretation of the document are as follows:
For a specified measure, LISTAGG
orders data within each group specified in the ORDER
BY
clause and then concatenates the values of the measure column.
I.e., within each group, LISTAGG column explants are ordered according to the order by clause, the results sorted spliced together.
measure_expr: it can be any expression-based column.
delimiter: delimiter, default NUL
order_by_clause: order by clause determines the order of column values are spliced.
By this use, it can be seen not only as a function of LISTAGG ordinary function, can also be used as analytical functions.
Usage order_by_clause and query_partition_clause as follows:
The following Examples illustrate the function:
Ordinary function, sort of wages, spliced with a comma.
SQL> select listagg(ename,',')within group(order by sal)name from emp; NAME ---------------------------------------------------------------------------------------------------- SMITH,JAMES,ADAMS,MARTIN,WARD,MILLER,TURNER,ALLEN,CLARK,BLAKE,JONES,FORD,SCOTT,KING
Group function:
SQL> select deptno,listagg(ename,',')within group(order by sal)name from emp group by deptno; DEPTNO NAME ---------- ---------------------------------------------------------------------------------------------------- 10 MILLER,CLARK,KING 20 SMITH,ADAMS,JONES,FORD,SCOTT 30 JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE
Analysis functions:
SQL> select deptno,ename,sal,listagg(ename,',')within group(order by sal)over(partition by deptno)name from emp; DEPTNO ENAME SAL NAME ---------- ---------- ---------- ---------------------------------------- 10 MILLER 1300 MILLER,CLARK,KING 10 CLARK 2450 MILLER,CLARK,KING 10 KING 5000 MILLER,CLARK,KING 20 SMITH 800 SMITH,ADAMS,JONES,SCOTT,FORD 20 ADAMS 1100 SMITH,ADAMS,JONES,SCOTT,FORD 20 JONES 2975 SMITH,ADAMS,JONES,SCOTT,FORD 20 SCOTT 3000 SMITH,ADAMS,JONES,SCOTT,FORD 20 FORD 3000 SMITH,ADAMS,JONES,SCOTT,FORD 30 JAMES 950 JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE 30 MARTIN 1250 JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE 30 WARD 1250 JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE 30 TURNER 1500 JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE 30 ALLEN 1600 JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE 30 BLAKE 2850 JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE 14 rows selected.
Recently in the learning process, I found a very interesting function, which can be realized splicing column values. Let us look at the specific usage.
usage:
Its role, the official interpretation of the document are as follows:
For a specified measure, LISTAGG
orders data within each group specified in the ORDER
BY
clause and then concatenates the values of the measure column.
I.e., within each group, LISTAGG column explants are ordered according to the order by clause, the results sorted spliced together.
measure_expr: it can be any expression-based column.
delimiter: delimiter, default NUL
order_by_clause: order by clause determines the order of column values are spliced.
By this use, it can be seen not only as a function of LISTAGG ordinary function, can also be used as analytical functions.
Usage order_by_clause and query_partition_clause as follows:
The following Examples illustrate the function:
Ordinary function, sort of wages, spliced with a comma.
SQL> select listagg(ename,',')within group(order by sal)name from emp; NAME ---------------------------------------------------------------------------------------------------- SMITH,JAMES,ADAMS,MARTIN,WARD,MILLER,TURNER,ALLEN,CLARK,BLAKE,JONES,FORD,SCOTT,KING
Group function:
SQL> select deptno,listagg(ename,',')within group(order by sal)name from emp group by deptno; DEPTNO NAME ---------- ---------------------------------------------------------------------------------------------------- 10 MILLER,CLARK,KING 20 SMITH,ADAMS,JONES,FORD,SCOTT 30 JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE
Analysis functions:
SQL> select deptno,ename,sal,listagg(ename,',')within group(order by sal)over(partition by deptno)name from emp; DEPTNO ENAME SAL NAME ---------- ---------- ---------- ---------------------------------------- 10 MILLER 1300 MILLER,CLARK,KING 10 CLARK 2450 MILLER,CLARK,KING 10 KING 5000 MILLER,CLARK,KING 20 SMITH 800 SMITH,ADAMS,JONES,SCOTT,FORD 20 ADAMS 1100 SMITH,ADAMS,JONES,SCOTT,FORD 20 JONES 2975 SMITH,ADAMS,JONES,SCOTT,FORD 20 SCOTT 3000 SMITH,ADAMS,JONES,SCOTT,FORD 20 FORD 3000 SMITH,ADAMS,JONES,SCOTT,FORD 30 JAMES 950 JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE 30 MARTIN 1250 JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE 30 WARD 1250 JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE 30 TURNER 1500 JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE 30 ALLEN 1600 JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE 30 BLAKE 2850 JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE 14 rows selected.