介绍
LISTAGG函数用于在查询时,将多行数据按指定的字符串和指定的顺序去拼接成一行。
注意,除RAW类型的字段会返回RAW类型外,其它都会返回varchar2类型。
语法
LISTAGG(measure_expr [, 'delimiter'])
WITHIN GROUP (order_by_clause) [OVER query_partition_clause]
说明:
- measure_expr 字段或表达式,它在查询时会忽略字段(表达式)中的空值。
- delimiter 作为拼接的字符串,此值是可选项,默认为NULL(空)。
- order_by_clause 排序子句,用来确定拼接后的顺序。
案例
作为单聚合函数
假设,我这边有这样一张表testaa,表中数据如下图所示:
现在有个需求要我们将表中的所有姓名用“-”拼接成一行,我们就可以这样写:
select listagg(name,'-')within group(order by 1) from testaa;
如此,就将全部姓名拼接成一行了。
作为组聚合函数
再假设,我这边有这样一张表testaa,表中数据如下图所示:
有个需求是要我们按不同性别去将姓名用“-”拼接起来,我们就可以这样写:
select sex,listagg(name,'-')within group(order by id desc)
from testaa
group by sex;
评论区