【Oracle】LISTAGG 函数的使用

【Oracle】LISTAGG 函数的使用LISTAGG 函数介绍 listagg 函数是 Oracle11 2 推出的新特性 其主要功能类似于 wmsys wm concat 函数 即将数据分组后 把指定列的数据再通过指定符号合并 LISTAGG 使用 listagg 函数有两个参数 1 要合并的列名 2 自定义连接符号 LISTAGG 函数既是分析函数 也是聚合函数所以 它有两种用法 1 分析函数

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,'' TEL,'深圳' ADDRESS FROM DUAL UNION SELECT 'SNO-0010210' S_NO,'1003' ITEM_NO, 'CandySun' CUS_NAME,'' TEL, '南京' ADDRESS FROM DUAL UNION SELECT 'SNO-0010211' S_NO, '1003' ITEM_NO,'QianSan' CUS_NAME,'' TEL,'南京' ADDRESS FROM DUAL UNION SELECT 'SNO-0010212' S_NO,'1005' ITEM_NO,'HuiClear' CUS_NAME,'' TEL,'白银' ADDRESS FROM DUAL UNION SELECT 'SNO-0010212' S_NO,'1007' ITEM_NO,'CatBool' CUS_NAME,'' TEL,'重庆' ADDRESS FROM DUAL UNION SELECT 'SNO-0010212' S_NO,'1004' ITEM_NO,'Liability' CUS_NAME,'' TEL,'成都' ADDRESS FROM DUAL ) 

test

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) ADDRESS FROM test T GROUP BY T.S_NO; 

res1

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) ADDRESS FROM test T; 

res2

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233400.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java怎么输入字符_java怎么输入一个字符

    java怎么输入字符_java怎么输入一个字符思路:先创建一个Scanner对象,调用Scanner对象的next()方法获取控制台输入的字符串,返回的是一个String类型,因为没有nextChar()方法,所以调用String的charAt(0)方法获取第一个字符,这样一来,我们就输入了一个字符串。输入一个字符的方法:importjava.util.Scanner;Scannerscanner=newScanner(System…

    2022年7月8日
    30
  • SQL学习(二):concat函数(连接字符串)

    SQL学习(二):concat函数(连接字符串)concat函数(连接字符串):使用方法:CONCAT(str1,str2,…)返回结果为连接参数产生的字符串。如有任何一个参数为NULL,则返回值为NULL。注意:如果所有参数均为非二进制字符串,则结果为非二进制字符串。如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型cast,例如:SELECTCONCAT(CAST(int_colASCHAR),char_col)concat函数

    2022年5月3日
    124
  • 博客日记

    博客日记博客日记 一直想搭建好自己的网站,可是都没有坚持下去。可能对于自己时没有压力的创作,或者是说在自己觉得不好创作的时候直接一把删除是很放松的,这也导致了我从2019年开始弄到现在一个网站也没有坚持下来,就是因为自己的感受到的*删库*的成本太低了,哈哈没有办法,现在重新开始买了服务器买了域名,去备案,结果确实自己的备案被驳回来了,原因就是我的备案信息不正确。。。腾讯的客服回电话说的是比对没有任何问题,但是就是信息比对不正确,我也很迷。现在要重新备案,惨淡的八九天又要来了,不知道粤局

    2022年4月28日
    34
  • 情商的研究

    情商EQ认识与提高情商(情绪、意志、性格、行为习惯组成的商数)情商(EmotionalQuotient)通常是指情绪商数,简称EQ,主要是指人在情绪、意志、耐受挫折等方面的品质,其包括导商(LQ)等。总的来讲,人与人之间的情商并无明显的先天差别,更多与后天的培养息息相关。它是近年来心理学家们提出的与智商相对应的概念。从最简单的层次上下定义,提高情商是把不能控制情绪的部分变为可以…

    2022年4月9日
    35
  • 老博客的日记集之工作之后「建议收藏」

    老博客的日记集之工作之后「建议收藏」 GOLD日记 2007年9月26日星期三上班时间:9:00-21:30据说今天晚上要GOLD,于是做好了晚上不回家的准备。最近在看魔兽世界,想领略一下这个目

    2022年7月11日
    15
  • 博客背景颜色怎么改_皮肤图片

    博客背景颜色怎么改_皮肤图片步骤:管理博客–>博客设置–>鼠标箭头移至当前模板–>鼠标右键–>检查–>找到checked=“checked”readonly将这段代码剪切后–>粘贴

    2022年10月9日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号