Java程序员必须掌握的Oracle关于listagg() WITHIN GROUP()行转列函数的使用

本文介绍了Oracle数据库中listagg() WITHIN GROUP()函数的使用方法,适用于Oracle11g及以上版本。通过示例展示了如何将数据行转列,并详细解释了函数的组成部分和作用。在Java开发中,此函数对于处理数据库查询结果的聚合非常有用。

前言

所有版本的Oracle软件都可以使用 :

select wm_concat(name) as name from user;

但如果是oracle11g或者以上版本,官方推荐使用以下方法 :

select listagg(name, ',') within group( order by name) as name from user;

在这里插入图片描述

这个函数该怎么使用?

首先,建一个表含以下字段 :

列名字段类型
xTypeNUMBER
Citynvachar2(200)

然后,为以上MyTest表添加一些样式数据

Insert into MyTest(xType , City) values (1 , ‘北京’)
Insert into MyTest(xType , City) values (1 , ‘上海’)
Insert into MyTest(xType , City) values (1 , ‘广州’)
Insert into MyTest(xType , City) values (2 , ‘武汉’)
Insert into MyTest(xType , City) values (2 , ‘杭州’)
Insert into MyTest(xType , City) values (2 , ‘厦门’)

也可以通过以下这种方式添加

Insert into MyTest (xType , City)
Select 1 , '北京' From dual UNION ALL
Select 1 , '上海' From dual UNION ALL
Select 1 , '广州' From dual UNION ALL
Select 2 , '武汉' From dual UNION ALL
Select 2 , '杭州' From dual UNION ALL
Select 2 , '厦门' From dual UNION ALL

如下图 :
在这里插入图片描述
如果使用wm_Concat的模式查询数据

Select xType ,wmsys.wm_concat(to_char(City)) AS xCity From MyTest Group By xType

如果使用官方推荐的listagg形式(必须是oracle11g或者以上的版本)

Select xType ,listagg(to_char(City) , ' , ')  within Group (Order By xType) AS  xCity From MyTest Group By xType

结果如下图 :
在这里插入图片描述

解读 listagg() WITHIN GROUP()函数

Select xType ,listagg(to_char(City) , ’ , ') within Group (Order By xType) AS xCity From MyTest Group By xType

解读 :
listagg(to_char(City) , ’ , ')
行转列函数:将city这列转成一列,每个数据之间以“,”隔开

within Group (Order By xType)
很明显,这是将数据通过xType来分组

AS xCity
作表名

From MyTest
从MyTest表查询

Group By xType
分组查询

总的起来说 : 这句Sql的表达的是
查询MyTest表里xType 列和将City这一列通过xType分组的多项数据用“,”隔开整合的结果查询出来并再次用xType列进行分组

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值