首页 > 数据库 >Oracle 中 LISTAGG 函数的介绍以及使用

Oracle 中 LISTAGG 函数的介绍以及使用

时间:2023-12-28 09:24:25浏览次数:45  
标签:LISTAGG 函数 NO ITEM ADDRESS Oracle TEL

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


标签:LISTAGG,函数,NO,ITEM,ADDRESS,Oracle,TEL
From: https://www.cnblogs.com/codeLearn/p/17931924.html

相关文章

  • lightdb/postgresql中plpgsql、函数与操作符、表达式及其内部实现
    PG_PROCPG_OPERATORpg_opclass用于定义索引上的相关操作符,一般来说是同一类数据类型。pg_opfamiliy定义了相互兼容的数据类型的操作符,关系见https://www.postgresql.org/docs/9.1/catalog-pg-opclass.html。pg8.3引入pg_opfamilies,原因:Create "operatorfamilies" toimprove......
  • C++ --- 函数模板
    函数模板C++的一种编程思想称为泛型编程,主要利用的技术就是模板。编写与类型无关的调用代码,是代码复用的一种手段。 模板是泛型编程的基础。C++提供两种模板机制:函数模板和类模板。函数模板:建立一个通用的函数,它用到的参数类型可以不确定,用一个虚拟类型替代。等到函数调用的时......
  • Sass函数与调试----持续更新
    内置函数详情查看菜鸟教程自定义函数自定义函数需要使用@function定义函数,通过@return指令返回数据。例如:@functiondouble($width){@return$width*2;}body{width:double(5px);}调试调试指令可以在编译sass时定义控制台的输出信息,共有三个指定,分别是:@debug......
  • 数仓的常用函数
    数仓的常用函数###当前日期selectcurrent_date()###当前时间selectcurrent_timestamp()###日期增加函数selectdate_add(current_date(),3)fromdws_study.user_video_log_new_dailylimit10###日期减少函数selectdate_sub(current_date(),10)fromdws......
  • 值函数近似
    值函数近似,这是一个很有意思的东西,为后面DQN做铺垫吧,就是说,你想要训练模型,你手上确实有数据,0,1,2,3,4,5。。。。。诸如此类但是,它们就只是一个个的点,它们是离散的,不是连续的,比如说有一个和重要的状态,它是最优的一个点,但它夹在了1和2的中间,然后你也拿不到这个数据,因为你能拿到的就是离散......
  • Oracle 闪回技术
    闪回技术概述Oracle数据库闪回技术是一组独特而丰富的数据恢复解决方案,通过有选择地,有效的消除错误影响,可逆转人为错误。-查看数据地过去状态-可沿时间轴向前或向后闪回-协助用户进行错误分析和恢复-简单的命令行操作(或者DBMS_FLASHBACK包)-闪回时间与数据库大小无关闪......
  • PGSQL_函数
    逗号分隔字符串,转换成一列--源数据:'c6d4eed5,7e51b2d9,768db3f1,7cc464bb'--函数:regexp_split_to_tableSELECTregexp_split_to_table('c6d4eed5,7e51b2d9,768db3f1,7cc464bb',',')逗号分隔字符串,转换成数组--源数据:'c6d4eed5,7e51b2d9,768db3f1,7cc464bb......
  • 怎么用 python 项目函数实现字符串反转
    字符串反转是一个常见的操作,可以通过Python函数轻松实现。在本文中,我们将探讨如何使用Python函数来反转字符串,无论是针对单个字符串还是列表中的多个字符串。1.反转单个字符串要反转单个字符串,我们可以使用Python的切片功能或者内置的reversed()函数。使用切片功能defrevers......
  • oracle数据泵导入导出dmp文件
    创建表空间TCMP--创建表空间TCMP('D:\database\TCMP.dbf'--使用指定文件保存)(size4096m--初始大小)(autoextendonnext100m--没有空间的时候文件默认增长大小)(maxsize10240m--文件的最大值,如果达到最大值,会提示扩展失败。需给表空间增加文件保存)createtablespaceTCMP......
  • Oracle 11g RAC(openfiler +multipath +udev +补丁升级)
    配套视频:《Oracle11gRAC安装》 或《Oracle11gRAC安装》配套文档:《一步一步在linux上部署Oracle11gR2RAC》......