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根据工资分组,将工资相同的员工查询出来,并且根据入职时间排序,用逗号拼接
作者:小念
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。