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

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

时间:2024-07-24 11:21:08浏览次数:15  
标签:LISTAGG 函数 NO ITEM ADDRESS Oracle TEL

原文地址:https://www.cnblogs.com/codeLearn/p/17931924.html

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/eyesfree/p/18320447

相关文章

  • 用两种类型的函数拟合数据
    我有数据x和y,想要将一个部分与power_fit相匹配,而另一部分与负power_fit最终稳定为零,并从一些-20nm开始,具有一些5nF值,并在最小值agian开始上升并变为零后下降。|我在某些时候被零除。我使用了两个函数,一个在最小值之前,另一个在最小值之后。将numpy导入为np将m......
  • 数字信号||用窗函数法设计FIR数字滤波器(5)
    实验五  用窗函数法设计FIR数字滤波器一、实验目的(1)加深对窗函数法设计FIR数字滤波器的基本原理的理解。(2)学习用MATLAB语言的窗函数法编写设计FIR数字滤波器的程序。(3)了解MATLAB有关窗函数法设计的常用子函数。二、实验涉及的MATLAB子函数1.boxcar功能:矩形窗。......
  • 委托事件及回调函数
    1.回调函数是指将方法作为参数传递给函数代码如下:usingSystem;namespaceCallbackExample{//定义一个委托类型delegatestringCallbackDelegate(intvalue);classProgram{//使用事件staticeventCallbackDelegatecallback;......
  • Python函数获取匹配和错误记录
    我有一个以下格式的json文件:[{"type":"BEGIN","id":"XYZ123"},{"type":"END","id":"XYZ123",},{"type":&......
  • 将多处理池与采用数组列表的函数结合使用
    我正在尝试编写一个函数来并行读取大量文件。我的代码如下:importnumpyasnpfrommultiprocessingimportPoolfromfunctoolsimportpartialdefread_profiles(stamp,name,cols,*args):#Thisfunctionreadseachfile.filename=name+'-'+str(int(timestep[......
  • SQL 命令在手动运行时工作正常(SQL Developer),但在 Python 的 oracledb 模块中给出 ORA-
    我正在使用OracleSQL数据库,并且我想运行该命令ALTERSESSIONSETNLS_DATE_FORMAT='YYYY-MM-DD';当我从SQLDeveloper应用程序手动运行它时,它工作正常。但是,当我使用oracledb模块从Python运行它时,出现以下错误:ErrorrunningSQLscript:ORA-00922:mi......
  • python 以及将数组传递给函数的问题
    我需要求解一些常微分方程$\frac{dy}{dx}=f(x)=x^2ln(x)$并继续在限制0之间创建数组xpt。<=xpt<=2因为我必须小心xpt=0,所以我将函数定义如下deff(x):ifx<=1.e-6:return0.else:returnnp.square(x)*np.log(x)我的调用程序读取Np......
  • 回退函数
    函数回退函数写法一:发送主币fallback()external{}特点:外部可视,可接受主币发送,调用合约中不存在的函数,就触发该回退函数的逻辑如果想让该函数可以直接发送主币,需要加上“payable”例如:fallback()externalpayable{}写法二:只接受主币receive()externalpayable{}该......
  • 记录一下oracle 19c的集群节点移除、新增操作
    虽然掌握得不够深入,但越来越讨厌oracle数据库这个软件了,实在不愿意再孤岛这个笨重、复杂的oracle了。今天花了好几个小时操作一个实验环境的迁移、配置,记录几个步骤吧,也许后续会有用。■查看数据库配置信息[oracle@node1:0~]$srvctlconfigdatabase-dblikingdbDatabaseu......
  • 函数传参,递归函数(汉诺塔,裴波那契数列),预处理
    递归函数 获得斐波那契数列的第n项的值斐波那契数列是指这样一个数列:1,1,2,3,5,8,13,21,34,55,89……这个数列从第3项开始,每一项都等于前两项之和。#include<stdio.h>intFbnq(intn){if(n==1){return1;}elseif(n==2){return1......