oracle里的listagg,oracle中的listagg函数

本文介绍了Oracle数据库中LISTAGG函数的使用,该函数用于将多行数据合并为单行字符串。通过WITHIN GROUP (ORDER BY)子句实现合并后的排序,并通过PARTITION BY进行分组。示例展示了如何根据国家分组,按城市名称排序,将不同城市的名称用逗号分隔。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

listagg()用于字符串聚集

LISTAGG(XXX--要合并的列,XXX--分隔符) WITHIN GROUP( ORDER BY XXX) over(partition by XXX)

需要注意的事项如下:

1. 必须得分组,也就是说group  by是必须的。

2. listagg函数的第一个参数是需要进行合并的字段;第二个参数是分隔符;同时还需要进行排序和分组within group (order by XXX)

eg:

(1)LISTAGG(XXX--要合并的列,XXX--分隔符) WITHIN GROUP( ORDER BY XXX)

with temp as(

select 'China' nation ,'Guangzhou' city from dual union all

select 'China' nation ,'Shanghai' city from dual union all

select 'China' nation ,'Beijing' city from dual union all

select 'USA' nation ,'New York' city from dual union all

select 'USA' nation ,'Bostom' city from dual union all

select 'Japan' nation ,'Tokyo' city from dual

)

select nation,listagg(city,',') within GROUP (order by city)

from temp

group by nation

China Beijing,Guangzhou,Shanghai

Japan Tokyo

USA Bostom,New York

(2)

LISTAGG(XXX--要合并的列,XXX--分隔符) WITHIN GROUP( ORDER BY XXX)

over(partition by XXX)

with temp as(

select 500 population, 'China' nation ,'Guangzhou' city from dual union all

select 1500 population, 'China' nation ,'Shanghai' city from dual union all

select 500 population, 'China' nation ,'Beijing' city from dual union all

select 1000 population, 'USA' nation ,'New York' city from dual union all

select 500 population, 'USA' nation ,'Bostom' city from dual union all

select 500 population, 'Japan' nation ,'Tokyo' city from dual

)

select population,

nation,

city,

listagg(city,',') within GROUP (order by city) over (partition by nation) rank

from temp ;

500ChinaBeijingBeijing,Guangzhou,Shanghai

500ChinaGuangzhouBeijing,Guangzhou,Shanghai

1500ChinaShanghaiBeijing,Guangzhou,Shanghai

500JapanTokyoTokyo

500USABostomBostom,New York

1000USANew YorkBostom,New York

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值