欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

如何在2020年11月2日的Oracle SQL中使用listagg函数?

最编程 2024-08-08 12:55:05
...
listagg 函数的作用就是将多行记录合成一行记录

基础用法:listagg(a,b) within group(order by c)

a指的是要进行拼接的字段, b指的是连接字段与字段之前的连接符号 c指的是按照什么顺序将字段连接,sql语句最后面要使用group by 分组,listagg是将分组之后的字段数据进行拼接,如果没有最后没有分组会报错 ora00937:not a single-group group function.

假设现在存在一个表users,包含以下字段
			用户编号( id varchar2(30) , )
			用户姓名 (name  varchar2(100) ,)
			用户年龄 (age  number,)
			用户性别 (sex number , ) 男:1   , 女:0
			用户部门(dept varchar2(20) ,)分为 a,b,c,d四个小部门。

现在要查出每个部门的员工编号集合,每个部门当做一条记录。

select dept,
listagg(id,',') within group(order by age) ids ,
listagg(name,',') within group(order by age) names 
from users group by dept

这样就可以查出部门编号、部门下用户id拼接的ids,部门下用户名拼接的names 的数据了。

mysql也有对应的合并函数 group_concat()也可以实现oracle listagg的效果

语法
group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )

select 
  dept,
	group_concat ( id ORDER BY age separator ',' ) ids,
	group_concat ( name ORDER BY age separator ',' ) names,
from users  group by dept

本文mysq实现部分参考了 其他博客,参考博客链接:https://blog.****.net/sinat_36257389/article/details/95052001

推荐阅读