Oracle聚合函数LISTAGG和WM_CONCAT简介
目录
- Oracle聚合函数LISTAGG和WM_CONCAT简介
- LISTAGG 函数
- 1.语法
- 2.示例
- 3.去除重复值
- WM_CONCAT 函数
- 1.语法
- 2.示例
- 3.去除重复值
- 比较
- 1.性能
- 2.排序与分隔符
- 3.去除重复值
Oracle聚合函数LISTAGG和WM_CONCAT简介
在处理数据库中的数据聚合任务时,我们经常需要将多行数据合并成一行字符串或列表。Oracle 提供了两种函数来实现这一目标:LISTAGG 和 WM_CONCAT。这两种函数各有特点,适用于不同的场景。
LISTAGG 函数
LISTAGG 是一个聚合函数,用于将一组值连接成一个字符串。它支持指定分隔符,并且可以设置最大长度以避免结果超出限制。
1.语法
LISTAGG(column, separator) WITHIN GROUP (ORDER BY column)
- column: 要连接的列名。
- separator: 用作连接值之间的分隔符。
- WITHIN GROUP (ORDER BY column): 可选子句,用于指定连接结果的顺序。
2.示例
假设我们有一个表 orders,其中包含以下数据:
| order_id | product |
|---|---|
| 1 | Apples |
| 1 | Bananas |
| 2 | Oranges |
| 2 | Apples |
| 2 | Oranges |
创建表 orders
CREATE TABLE orders (order_id NUMBER(5) NOT NULL,product VARCHAR2(20) NOT NULL
);
插入数据
INSERT INTO orders (order_id, product)
VALUES (1, 'Apples');INSERT INTO orders (order_id, product)
VALUES (1, 'Bananas');INSERT INTO orders (order_id, product)
VALUES (2, 'Oranges');INSERT INTO orders (order_id, product)
VALUES (2, 'Apples');INSERT INTO orders (order_id, product)
VALUES (2, 'Oranges');
使用上面的 orders 表,我们可以使用 LISTAGG 函数来获取每个订单的所有产品:
SELECT order_id,LISTAGG(product, ', ') WITHIN GROUP (ORDER BY product) AS products
FROM orders
GROUP BY order_id;
输出:
| order_id | products |
|---|---|
| 1 | Apples, Bananas |
| 2 | Apples, Oranges, Oranges |
3.去除重复值
由于 LISTAGG 不支持 DISTINCT,我们可以通过子查询或者窗口函数来达到去除重复值的目的:
SELECT order_id,LISTAGG(product, ', ') WITHIN GROUP (ORDER BY product) AS products
FROM (SELECT order_id, productFROM (SELECT order_id, product,ROW_NUMBER() OVER (PARTITION BY order_id, product ORDER BY (NULL)) AS rnFROM orders)WHERE rn = 1
)
GROUP BY order_id;
输出:
| order_id | products |
|---|---|
| 1 | Apples, Bananas |
| 2 | Apples, Oranges |
WM_CONCAT 函数
WM_CONCAT 是另一个连接函数,它将多个值连接成一个字符串。这个函数主要用于连接少量的数据,因为它没有内置的排序功能,并且可能会遇到性能问题。
1.语法
WM_CONCAT(column)
- column: 要连接的列名。
2.示例
使用上面的 orders 表,我们可以使用 WM_CONCAT 函数来获取每个订单的所有产品:
SELECT order_id,WM_CONCAT(product) AS products
FROM orders
GROUP BY order_id;
输出:
| order_id | products |
|---|---|
| 1 | Apples, Bananas |
| 2 | Oranges,Oranges,Apples |
备注:使用 WM_CONCAT 函数没有内置的排序功能,结果可能无顺序。
3.去除重复值
在 WM_CONCAT 中去除重复值的方式非常直观,可以直接使用 DISTINCT 关键字:
SELECT order_id,WM_CONCAT(DISTINCT product) AS products
FROM orders
GROUP BY order_id;
输出:
| order_id | products |
|---|---|
| 1 | Apples, Bananas |
| 2 | Apples ,Oranges |
比较
1.性能
- LISTAGG: 性能较好,尤其是在处理大量数据时。
- WM_CONCAT: 在处理大量数据时性能较差。
2.排序与分隔符
- LISTAGG: 支持排序和自定义分隔符。
- WM_CONCAT: 不支持排序,使用逗号作为默认分隔符。
3.去除重复值
- LISTAGG: 需要通过子查询或窗口函数去除重复值。
- WM_CONCAT: 可以直接使用
DISTINCT关键字去除重复值。
LISTAGG 和 WM_CONCAT 都可以用来连接多个值,但 LISTAGG 更加灵活并且性能更优。对于大多数情况来说,推荐使用 LISTAGG 函数,特别是在需要对结果进行排序或需要自定义分隔符的情况下。在仅需要去除重复值时 WM_CONCAT 可能更方便,WM_CONCAT 可以直接使用 DISTINCT 关键字,而 LISTAGG 则需要通过子查询或窗口函数的方法来实现。
相关文章:
Oracle聚合函数LISTAGG和WM_CONCAT简介
目录 Oracle聚合函数LISTAGG和WM_CONCAT简介LISTAGG 函数1.语法2.示例3.去除重复值 WM_CONCAT 函数1.语法2.示例3.去除重复值 比较1.性能2.排序与分隔符3.去除重复值 Oracle聚合函数LISTAGG和WM_CONCAT简介 在处理数据库中的数据聚合任务时,我们经常需要将多行数据…...
【Unity】多种寻路算法实现 —— BFS,DFS,Dijkstra,A*
本实验寻路算法均基于网格实现,整体称呼为Grid,单个瓦片称之为Tile 考虑程序处理的简洁性,所有算法使用同一种Tile,且权值点,A*所需的记录数值也全部放在Tile中记录 前排贴上代码仓库链接: GitHub - Sir…...
十大游戏设计软件:创意实现的利器
在数字娱乐的多彩世界里,游戏设计无疑是一项充满创意与技术挑战的艺术。随着技术的进步,游戏设计师的手中拥有了一系列强大的工具,它们让想象中的世界得以呈现,让玩家的体验更加丰富和真实。本文将带你走进游戏设计的幕后…...
Pandas高级操作:多级索引、窗口函数、数据透视表等
在数据处理和分析中,pandas库提供了强大的功能,支持从简单到复杂的数据操作。本文将介绍一些pandas的高级操作,包括多级索引(MultiIndex)、窗口函数(Window Functions)、数据透视表与复杂聚合、数据合并与连接、高级数据变换以及时间序列数据的高级处理。 1. 多级索引(…...
mysql源码编译启动debug
对于没有C语言基础的同学来说,想看看源码,在搞定编辑器做debug的时候就被劝退了,发生点啥了,完全看不懂,不知道从哪里入手去做debug;我为了看看 mysql 的 insert buffer 到底存的是索引页还是数据页&#x…...
吴恩达机器学习-C1W3L2-逻辑回归之S型函数
可选实验:逻辑回归 在这个不评分的实验中,你会 探索sigmoid函数(也称为logistic函数)探索逻辑回归;哪个用到了s型函数 import numpy as np %matplotlib widget import matplotlib.pyplot as plt from plt_one_addpt_onclick import plt_one_addpt_onclick from l…...
P-one新增火焰图-为性能测试开启新视野
随着软件业务流程的日益复杂,传统的性能测试方法已经难以满足对性能问题精准定位的需求。测试人员需要一种更加直观、全面的方式来分析软件在运行过程中的性能表现,以便快速准确地找到性能瓶颈并进行优化。因此,我们在性能测试平台P-One中加入…...
CTF-web基础 TCP/UDP协议
传输层协议由TCP/UDP协议组成,来控制信息的传输,二者有什么区别呢,TCP比较靠谱,但是UDP速度比较快一点。 TCP协议 Transmission Control protocol, 三次握手:先给服务器传输询问要发消息,然后…...
sql常用语法总结
SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系数据库的标准编程语言。本文用来记录一些接触到的sql语句,随着学习不断进行更新: 选择数据 - SELECT 语句用于从数据库表中检索数据。 SELECT column1, column2 FROM table_name;插入数据 - INSERT…...
实验八 题目描述 从键盘上输入任意一个整数(正负数皆可),判断该整数的绝对值是否为回文数。
实验八 题目描述 从键盘上输入任意一个整数(正负数皆可),判断该整数的绝对值是否为回文数。[提示:取数的绝对值,然后使用用循环语句从该绝对值的末位开始至最高位,重新构造一个数,…...
IsaacLab | Workflow 中 rsl_rl 的 play.py 脚本精读
如是我闻: 在用IsaacLab 做强化学习实验时,回顾已训练好的模型需要调用workflow中的play.py脚本,以下是对rsl_rl的play.py脚本的逐行精读。 1. 版权声明和文件描述 # Copyright (c) 2022-2024, The Isaac Lab Project Developers. # All ri…...
PYTHON专题-(8)我错了该怎么整?
什么是异常处理? 异常处理是一种机制,用于在程序执行期间发生错误或异常时,对发生的异常进行捕获、处理和恢复,以确保程序能够继续执行或正确地终止。异常处理可以包括捕获异常、处理异常,以及执行相应的操作来处理异常…...
【自然资源】设施农业用地的学习梳理
【自然资源】设施农业用地的学习梳理 什么是设施农业用地? 2019年12月17日,自然资源部 、农业农村部印发的《关于设施农业用地管理有关问题的通知》规定:设施农业用地包括农业生产中直接用于作物种植和畜禽水产养殖的设施用地。其中&#x…...
【秋招笔试】24-07-27-OPPO-秋招笔试题(后端卷)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 💡 01.二进制反转游戏 问题描述 K小姐…...
JS 补充内容
一、dir 打印对象 二、获取 html 中的元素 常用的两种方式 其他获取元素的方法 三、 innerText 四、innerHTML 五、修改元素的值 六、鼠标放上去,显示图片的提示文字 img . title 七、获取 N ~ M 之间的随机整数 八、修改属性样式 1. style 2. className 将后面 …...
H5+JS 4096小游戏
主要实现 1.使用WASD或方向按钮控制游戏 2.最高值4096,玩到4096视为胜利 3.随机生成2、4、8方块 4.移动方块 5.合并方块 JS代码干了什么 初始化游戏界面:创建游戏板和控制按钮。 定义游戏相关变量:如棋盘大小、棋盘状态、得分等。 初始化棋…...
常见中间件漏洞(二、WebLogin合集)
目录 二、WebLogic Weblogic介绍 2.1 后台弱口令GetShell 漏洞描述 影响范围 环境搭建 漏洞复现 2.2 CVE-2017-3506 漏洞描述 影响版本 环境搭建 漏洞复现 2.3 CVE-2019-2725 漏洞描述 影响版本 环境搭建 漏洞复现 2.4 CVE-2018-2628 漏洞描述 漏洞影响 环…...
LeetCode LCR147.最小栈
LeetCode LCR147.最小栈 思路🤔: 建立两个栈,一个栈正常入栈出栈,一个栈只用于出入最小数,当push值小于minst栈顶才入栈,当pop值等于minst栈顶才出栈。 代码🔎: class MinStack { pu…...
目标检测的算法有哪些
目标检测是计算机视觉领域的一个重要任务,它涉及识别图像或视频中的对象,并确定它们的位置和类别。随着深度学习的发展,出现了许多高效且准确的目标检测算法。以下是一些主要的目标检测算法: 两阶段检测器(Region-bas…...
HDU多校-交通管控
Problem - 7498 (hdu.edu.cn) 直接dfs显然不行,达到了2^500,那么我们可以考虑枚举所有红绿灯的状态,总共有三种状态,k的范围小于等于10,因此所有状态数为3^10不会超,所以通过三进制状压dp即可完成…...
暗黑3技能连点器终极指南:三步解决重复操作难题
暗黑3技能连点器终极指南:三步解决重复操作难题 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑3中重复的技能按键感到疲惫吗&…...
别再谈OKR了!SITS2026重磅发布《AI原生团队动力学模型》:用3个动态参数替代KPI,实测交付周期压缩41%
第一章:SITS2026演讲:AI原生研发的文化变革 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026主会场,来自全球37家头部科技企业的工程负责人共同指出:AI原生研发已不再仅是工具链升级,而是一场以“人机协同决…...
跳表(Skip List):思想、优劣与应用场景完全解读
一、为什么需要跳表?在计算机科学中,我们经常需要一种数据结构,既能快速查找,又能高效插入和删除。数组的二分查找虽然快(O(log n)),但插入删除却需要移动大量元素(O(n))…...
QT点云渲染实战--从QGLWidget到交互式3D可视化
1. 为什么选择QT和QGLWidget做点云可视化 第一次接触3D点云渲染时,我试过用Python的Matplotlib,也折腾过PCL库,但真正要在工业软件中集成可视化功能时,QTQGLWidget的组合给了我惊喜。这个经典方案虽然不如现代WebGL炫酷࿰…...
深入理解Strudel核心组件:从模式语法到音频处理
深入理解Strudel核心组件:从模式语法到音频处理 【免费下载链接】strudel MOVED TO CODEBERG - Web-based environment for live coding algorithmic patterns, incorporating a faithful port of TidalCycles to JavaScript 项目地址: https://gitcode.com/gh_mi…...
南开计算机复试面试:除了408专业课,老师更看重你的‘科研潜力’和‘诚实’
南开大学计算机复试:如何用‘科研潜力’与‘诚实’打动面试官 每年春季,南开大学计算机学院的复试现场总是充满微妙博弈。当一位考生面对五位教授的轮番提问时,真正决定胜负的往往不是标准答案的准确度,而是那些无法用分数直接量化…...
避坑指南:用ESP32做蓝牙SPP通信时遇到的5个典型问题及解决方法
ESP32蓝牙SPP通信实战避坑指南:5个典型问题与深度解决方案 当你在凌晨三点盯着调试终端里闪烁的光标,蓝牙连接却突然断开时——这种崩溃感我太熟悉了。作为经历过数十个ESP32蓝牙项目的开发者,我整理了这些血泪教训。本文将直击SPP通信中最棘…...
告别电脑噪音!5步掌握免费风扇控制软件FanControl
告别电脑噪音!5步掌握免费风扇控制软件FanControl 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/Fan…...
Java Loom + R2DBC + VirtualThread三重奏:构建零阻塞数据库访问层(含GraalVM原生镜像适配方案)
第一章:Java Loom响应式编程转型的背景与核心价值长期以来,Java 的并发模型依赖线程(Thread)作为基本执行单元,但传统线程是重量级操作系统资源,受限于内核调度开销与内存占用(每个线程栈默认 1…...
像素剧本圣殿完整指南:系统指令注入、创意滑块调节、时空重置三步工作流
像素剧本圣殿完整指南:系统指令注入、创意滑块调节、时空重置三步工作流 1. 像素剧本圣殿简介 像素剧本圣殿(Pixel Script Temple)是一款基于Qwen2.5-14B-Instruct深度微调的专业剧本创作工具。它将强大的AI推理能力与独特的8-Bit复古美学相…...
