【Oracle】LISTAGG 函数的使用
LISTAGG 函数介绍
listagg 函数是 Oracle 11.2 推出的新特性。
其主要功能类似于 wmsys.wm_concat 函数, 即将数据分组后, 把指定列的数据再通过指定符号合并。
LISTAGG 使用
listagg 函数有两个参数:1、 要合并的列名2、 自定义连接符号☆LISTAGG 函数既是分析函数,也是聚合函数
所以,它有两种用法:1、分析函数,如: row_number()、rank()、dense_rank() 等,用法相似listagg(合并字段, 连接符) within group(order by 合并的字段的排序) over(partition by 分组字段)2、聚合函数,如:sum()、count()、avg()等,用法相似listagg(合并字段, 连接符) within group(order by 合并字段排序) --后面跟 group by 语句
(补充)分析函数和聚合函数
一部分聚合函数其实也可以写成分析函数的形式。分析函数和聚合函数本质上都是对数据进行分组,二者最大的不同便是:对数据进行分组分组之后,聚合函数只会每组返回一条数据,而分析函数会针对每条记录都返回,一部分分析函数还会对同一组中的数据进行一些处理(比如:rank() 函数对每组中的数据进行编号);还有一部分分析函数不会对同一组中的数据进行处理(比如:sum()、listagg()),这种情况下,分析函数返回的数据会有重复的,distinct 处理之后的结果与对应的聚合函数返回的结果一致。
LISTAGG 实例
先构造几笔临时数据
with test as(
SELECT 'SNO-0010210' S_NO,'1002' ITEM_NO,'BruceLiu' CUS_NAME,'15632148754' TEL,'深圳' ADDRESS FROM DUAL
UNION
SELECT 'SNO-0010210' S_NO,'1003' ITEM_NO, 'CandySun' CUS_NAME,'19745233214' TEL, '南京' ADDRESS FROM DUAL
UNION
SELECT 'SNO-0010211' S_NO, '1003' ITEM_NO,'QianSan' CUS_NAME,'19745233214' TEL,'南京' ADDRESS FROM DUAL
UNION
SELECT 'SNO-0010212' S_NO,'1005' ITEM_NO,'HuiClear' CUS_NAME,'19745233214' TEL,'白银' ADDRESS FROM DUAL
UNION
SELECT 'SNO-0010212' S_NO,'1007' ITEM_NO,'CatBool' CUS_NAME,'19745233214' TEL,'重庆' ADDRESS FROM DUAL
UNION
SELECT 'SNO-0010212' S_NO,'1004' ITEM_NO,'Liability' CUS_NAME,'18812436214' TEL,'成都' ADDRESS FROM DUAL
)
LISTAGG 分析函数用法
SELECT T.S_NO,LISTAGG(T.ITEM_NO, '/') WITHIN GROUP(ORDER BY T.S_NO, T.ITEM_NO) ITEM_NO,LISTAGG(T.CUS_NAME, '/') WITHIN GROUP(ORDER BY T.S_NO, T.ITEM_NO) CUS_NAME,LISTAGG(T.TEL, '/') WITHIN GROUP(ORDER BY T.S_NO, T.ITEM_NO) TEL,LISTAGG(T.ADDRESS, '/') WITHIN GROUP(ORDER BY T.S_NO, T.ITEM_NO) ADDRESSFROM test TGROUP BY T.S_NO;
LISTAGG 聚合函数用法
SELECT T.S_NO,LISTAGG(T.ITEM_NO, '/') WITHIN GROUP(ORDER BY T.S_NO, T.ITEM_NO) OVER(PARTITION BY T.S_NO) ITEM_NO,LISTAGG(T.CUS_NAME, '/') WITHIN GROUP(ORDER BY T.S_NO, T.ITEM_NO) OVER(PARTITION BY T.S_NO) CUS_NAME,LISTAGG(T.TEL, '/') WITHIN GROUP(ORDER BY T.S_NO, T.ITEM_NO) OVER(PARTITION BY T.S_NO) TEL,LISTAGG(T.ADDRESS, '/') WITHIN GROUP(ORDER BY T.S_NO, T.ITEM_NO) OVER(PARTITION BY T.S_NO) ADDRESSFROM test T;
【Oracle】LISTAGG 函数的使用相关推荐
- oracle listagg函数bug记录
测试数据在文章的最后给出 select * from test_190619_lagg_bug_1 t1,(select t2.sub_id,listagg(t2.val || '.' ) withi ...
- oracle的listagg函数
今天需要将 BDST_ID相同的PROJECT_ID用逗号分隔拼成一个字符串,于是想到了oracle的listagg函数 表名为PM_BDST_PROJECT select tt.BDST_ID, l ...
- listagg 函数--oracle 11g release 2
http://xpchild.blog.163.com/blog/static/10180985920108485721969/ listagg 函数--oracle 11g release 2 20 ...
- oracle listagg方法,Oracle实现字符串拼接和分离功能的方法(LISTAGG函数),oraclelistagg...
Oracle实现字符串拼接和分离功能的方法(LISTAGG函数),oraclelistagg 字符串拼接(String Aggregation Techniques)是数据处理时经常需要用到一个技术, ...
- Oracle的 wm_concat 的排序问题,Oracle的 listagg 函数[转]
一大早来广图排了大半个钟的队,总算占了个好位子.--2018-07-28 1.环境: 1.操作系统 windows 10 2.数据库:Oracle Database 11g r2 2.需求: 还是看例 ...
- Oracle的 wm_concat 的排序问题,Oracle的 listagg 函数
一大早来广图排了大半个钟的队,总算占了个好位子.--2018-07-28 1.环境: 1.操作系统 windows 10 2.数据库:Oracle Database 11g r2 2.需求: 还是看例 ...
- Oracle的 listagg 函数,多行合并一行
转自:https://blog.csdn.net/Huay_Li/article/details/81257655 --创建学校类型-年级表 create table SchoolGrade(scho ...
- 【Oracle】LISTAGG 函数的用法
函数介绍 listagg函数是Oracle 11.2 c 版本推出的,用于数据分组后将指定列数据通过间隔符号拼接,将多行转为一行显示. 实际使用 以班级为单位,查询每个班级学生(同班学生显示在一行) ...
- oracle数据库listagg,Oracle 19c 中的 LISTAGG 函数结果去重
Oracle 11gR2 中引入了 LISTAGG 函数,以简化字符串聚合.在Oracle 12cR2中,它已扩展为包括溢出错误处理.Oracle 19c 中通过包含 DISTINCT 关键字,可以从 ...
最新文章
- glib 2.0 arm linux,glib源码安装使用方法
- Abra宣布对BCH的原生支持
- 算法提高课-动态规划-树形DP-AcWing 1072. 树的最长路径:dfs写法
- 文本编辑器中查找对话框及功能实现
- uniapp光标自动定义到文本框_解决这3个问题,你就敢使用自动编号了
- (十四)算法设计思想之“贪心算法”
- mysql 长事务查询_MySQL长事务详解
- 热议创新 众专家再谈 “中国企业如何创造”
- c# 全局钩子实现扫码枪获取信息。
- Android实战简易教程-第二十八枪(Uri转String型实例)
- IDEA 常用设置 与 常用操作(三)
- 数据库的主键Id不是从1开始的
- 企业微信邀请通知在哪里设置?如何关闭?
- PHP防范XSS攻击
- 多个CYUSB3014连接主机时添加序列号
- 三、E906移植----FPGA生成可用的比特流并实现串口发送
- 小学计算机课的游戏橡皮小人,小学计算机科学课:两个女孩和男孩使用带增强现实软件的数码平板电脑,他们感到兴奋、充满惊奇、好奇。STEM 、游戏、学习中的儿童...
- 如何使自己跳得更高?------学习跳蚤效应的五点体会
- 浅析MOS管开关速度影响因素-KIA MOS管
- 信阳市少年计算机学校,信阳市胜利路学校: 奖杯璀璨 少年奋进