ORACLE函数之LISTAGG

 

函数作用

在每个分组内,LISTAGG根据order by 对列值进行排序,将排序后的结果拼接起来

 

函数语法

 

即:LISTAGG( [ALL] measure_expr [,'delimiter' [,listagg_overflow_clause] ] ) [ WITH GROUP (order_by_clause) [ OVER query_partion_clause] ]

说明:[]内表示是可选的

 

参数解释:

  • ALL:ALL关键字是可选的
  • measure_expr:是被操作的列,可以是任何基于列的表达式,列中空值将被忽略
  • delimiter:可选的,分隔符,拼接每个列值。默认值为NULL
  • listagg_overflow_clause:可选的,这个子句控制当返回值超过返回数据类型的最大长度时函数的行为。
  • order_by_clause:排序子句,决定被连接值的顺序
  • query_partion_clause:略,可搜索oracle分析函数【over(partition by...)】来了解

 

函数使用示例

1、sql脚本

create table salaryTable (
id int  primary key,
name varchar(32) DEFAULT ' ',
salary varchar(32) DEFAULT ' ',
entryTime TIMESTAMP(6) DEFAULT SYSTIMESTAMP
);

insert into salaryTable(id,name,salary,entryTime) values(1,'张三','5000',to_date('20181212','yyyymmdd'));
insert into salaryTable(id,name,salary,entryTime) values(2,'李四','6000',to_date('20191119','yyyymmdd'));
insert into salaryTable(id,name,salary,entryTime) values(3,'王五','5000',to_date('20160212','yyyymmdd'));
insert into salaryTable(id,name,salary,entryTime) values(4,'harara','8000',to_date('20110301','yyyymmdd'));
 

 

2、使用LISTAGG函数进行查询

2.1根据工资分组,将工资相同的员工查询出来,用逗号拼接

SELECT LISTAGG(NAME,','),salary FROM salaryTable GROUP BY salary;

 

2.2根据工资分组,将工资相同的员工查询出来,并且根据入职时间排序,用逗号拼接

 

posted @ 2023-03-15 16:17  harara  阅读(1785)  评论(0编辑  收藏  举报