mysql listagg within_Oracle函数之LISTAGG

最近在学习的过程中,发现一个挺有意思的Oracle函数,它可实现对列值的拼接。下面我们来看看其具体用法。

最近在学习的过程中,发现一个挺有意思的Oracle函数,它可实现对列值的拼接。下面我们来看看其具体用法。

用法:

21e6bdace13a6bd15c32f1ddb232a365.png

对其作用,官方文档的解释如下:

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的用法如下:

9d054963add0088b8e8372f831a642d5.png

09ef24ccaa1b0c3d3b8e16fad1ebed2d.png

下面对该函数进行举例说明:

普通函数,对工资进行排序,用逗号进行拼接。

SQL)within group(order by sal)name fromemp;

NAME----------------------------------------------------------------------------------------------------

SMITH,JAMES,ADAMS,MARTIN,WARD,MILLER,TURNER,ALLEN,CLARK,BLAKE,JONES,FORD,SCOTT,KING

分组函数:

SQL)within deptno;

DEPTNO NAMEMILLER,CLARK,KING20SMITH,ADAMS,JONES,FORD,SCOTT30 JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE

分析函数:

SQL)within group(order by sal)over(partition by deptno)name fromemp;

DEPTNO ENAME

SAL NAMEMILLER

1300MILLER,CLARK,KING10 CLARK

2450MILLER,CLARK,KING10 KING

5000MILLER,CLARK,KING20 SMITH

800SMITH,ADAMS,JONES,SCOTT,FORD20 ADAMS

1100SMITH,ADAMS,JONES,SCOTT,FORD20 JONES

2975SMITH,ADAMS,JONES,SCOTT,FORD20 SCOTT

3000SMITH,ADAMS,JONES,SCOTT,FORD20 FORD

3000SMITH,ADAMS,JONES,SCOTT,FORD30 JAMES

950JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE30 MARTIN

1250JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE30 WARD

1250JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE30 TURNER

1500JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE30 ALLEN

1600JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE30 BLAKE

2850JAMES,MARTIN,WARD,TURNER,ALLEN,BLAKE14 rows selected.

本文永久更新链接地址:

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值