阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle函数之LISTAGG

137次阅读
没有评论

共计 1984 个字符,预计需要花费 5 分钟才能阅读完成。

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

用法:

Oracle 函数之 LISTAGG

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

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

Oracle 函数之 LISTAGG

Oracle 函数之 LISTAGG

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

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

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

分组函数:

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

分析函数:

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.

更多 Oracle 相关信息见 Oracle 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=12

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计1984字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中