Listagg() - Oracle11gR2进行字符串汇总的新函数
来源:互联网 发布:软件设计师真题 编辑:程序博客网 时间:2024/06/05 21:57
Listagg() - Oracle11gR2进行字符串汇总的新函数
在 wait4friend 的一篇老文《Oracle进行字符串汇总》里面,提到了三种常用的方式。其中比较好用的是10g之后提供的wm_concat()函数。在日常使用中,我们发现了wm_concat函数的一些缺点。首先是这个函数本身不支持排序,要通过嵌套视图的方式进行排序。另一个问题是,当排序过程中,可能会遭遇ora-01467 sort key too long错误。
在11gR2版本中,有一个新的函数listagg(),可以提供更强的功能,并且效率更高。listagg()可以作为聚合函数使用,也可以作为分析函数使用。语法如下,
LISTAGG(measure_expr [, 'delimiter']) WITHIN GROUP (order_by_clause) [OVER query_partition_clause]
下面的例子演示了作为聚合函数使用,并且和wm_concat()进行比较。把10000行数据按照flag分为50个分组,并且对字段进行排序的情况下,在测试环境中,wm_concat和listagg有50倍的性能差异。
-- prepare demo data
drop table ttt purge;
create table ttt(flag int, x varchar2(10) , y varchar2(10), z varchar2(10), m varchar2(10), n varchar2(10));
insert into ttt select mod(rownum,50), rownum,rownum,rownum,rownum,rownum from dual connect by rownum<=10000;
commit;
select * from ttt;
-- wm_concat without ordering
select flag,
to_char(wm_concat(x)) as rx,
to_char(wm_concat(y)) as ry,
to_char(wm_concat(z)) as rz
from ttt
group by flag;
-- wm_concat with ordering
select flag, max(rx) rx, max(ry) ry, max(rz) rz
from (select flag,
to_char(wm_concat(x) over(partition by flag order by x)) as rx,
to_char(wm_concat(y) over(partition by flag order by y)) as ry,
to_char(wm_concat(z) over(partition by flag order by z desc)) as rz
from ttt)
group by flag;
-- listagg() in 11gR2
select flag,
listagg(x, ',') within group(order by x) rx,
listagg(y, ',') within group(order by y) ry,
listagg(z, ',') within group(order by z desc) rz
from ttt
group by flag
order by flag;
- Listagg() - Oracle11gR2进行字符串汇总的新函数
- Listagg() - Oracle11gR2进行字符串汇总的新函数
- Oracle11.2新特性之listagg函数
- Oracle11.2新特性之listagg函数
- Oracle-11g 新函数 LISTAGG 行转列
- Oracle11.2新特性之listagg函数
- oracle函数listagg的使用说明
- oracle函数listagg的使用说明
- Oracle11gr2分析函数新特性(二)
- Oracle11gr2分析函数新特性(一)
- listagg函数
- LISTAGG函数
- listagg函数
- Oracle 同一列的字符串值相加-列转行函数 Listagg()
- listagg 字符串连接的结果过长问题解决
- Oracle 11g 新聚集函数listagg实现列转行
- Oracle 11g 新聚集函数listagg实现列转行
- Oracle 11g 新聚集函数listagg实现列转行
- 测试用例的要素
- AppStore新应用上传指南
- solr学习之四--------Field、CopyField、DynamicField
- my_simple_RAII
- xquery
- Listagg() - Oracle11gR2进行字符串汇总的新函数
- 浅谈软件架构师的素质与职责
- android 十字架效果实现(水平和垂直滑动)
- Tiny210(S5PV210) U-BOOT(六)----DDR内存配置
- 扩展 jQuery EasyUI Datagrid 数据行鼠标悬停/离开事件(onMouseOver/onMouseOut)
- [设计模式笔记]三. 行为型模式--20. Memento模式(备忘录)对象行为型模式(一)
- ios开发时,在Xcode中添加多个targets进行版本控制
- Hadoop 生态环境
- 21个发人深省的小故事~~