共计 1566 个字符,预计需要花费 4 分钟才能阅读完成。
它可实现对列值的拼接。上面咱们来看看其具体用法。
用法:
对其作用,官网文档的解释如下:
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.
即在每个分组内,LISTAGG 依据 order by 子句对列植进行排序 ,将排序后的后果拼接起来。
measure_expr:能够是任何基于列的表达式。
delimiter:分隔符,默认为 NUL
order_by_clause:order by 子句决定了列值被拼接的程序。
通过该用法,能够看出 LISTAGG 函数不仅可作为一个一般函数应用,也可作为剖析函数。
order_by_clause 和 query_partition_clause 的用法如下:
上面对该函数进行举例说明:
一般函数,对工资进行排序,用逗号进行拼接。
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
+groupby 分组函数:
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
+over(partition by) 剖析函数:
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
正文完