oracle listagg如何去重
listagg去重
去重思路:利用listagg会忽略null值的特点
按ENTITY_GROUP_RRN 分组,用 listagg 分别合并 EQPT_ID 与 STATION_ID ,同时要求去重
表 T_TEST 数据如下:
EQPT_ID | ENTITY_GROUP_RRN | STATION_ID |
---|---|---|
TOOL-001 | 10493721 | JITAI-1 |
TOOL-003 | 10493721 | JITAI-1 |
TEST | 10493721 | S1 |
TEST | 10493721 | S2 |
TEST2 | 10493721 | S1 |
TEST2 | 10493721 | S2 |
TOOL-001 | 12345 | JITAI-1 |
TOOL-003 | 12345 | JITAI-1 |
TEST | 12345 | S1 |
TEST | 12345 | S2 |
TEST2 | 12345 | S1 |
TEST2 | 12345 | S2 |
3、上SQL:
with T_TEST as(select 'TOOL-001' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'JITAI-1' STATION_ID from dual union allselect 'TOOL-003' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'JITAI-1' STATION_ID from dual union allselect 'TEST' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'S1' STATION_ID from dual union allselect 'TEST' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'S2' STATION_ID from dual union allselect 'TEST2' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'S1' STATION_ID from dual union allselect 'TEST2' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'S2' STATION_ID from dual union allselect 'TOOL-001' EQPT_ID, 123456 ENTITY_GROUP_RRN, 'JITAI-1' STATION_ID from dual union allselect 'TOOL-003' EQPT_ID, 123456 ENTITY_GROUP_RRN, 'JITAI-1' STATION_ID from dual union allselect 'TEST' EQPT_ID, 123456 ENTITY_GROUP_RRN, 'S1' STATION_ID from dual union allselect 'TEST' EQPT_ID, 123456 ENTITY_GROUP_RRN, 'S2' STATION_ID from dual union allselect 'TEST2' EQPT_ID, 123456 ENTITY_GROUP_RRN, 'S1' STATION_ID from dual union allselect 'TEST2' EQPT_ID, 123456 ENTITY_GROUP_RRN, 'S2' STATION_ID from dual
)
select t.entity_group_rrn,listagg(decode(rne, 1, t.eqpt_id, null), ',') within group(order by t.eqpt_id) eqpt_ids,listagg(decode(rns, 1, t.station_id, null), ',') within group(order by t.station_id) station_idsfrom (select row_number() over(partition by t.entity_group_rrn,t.eqpt_id order by rownum) rne,row_number() over(partition by t.entity_group_rrn,t.station_id order by rownum) rns,t.*from T_TEST t) tgroup by t.entity_group_rrn;
查询结果
- 总结
1、通常情况可以先分组去重,再合并即可,除非遇到同一分组中,多列分别有重复值,才需要上面那样处理
2、还有另一种去重办法,使用 wm_concat + distinct ,如下:
with T_TEST as(select 'TOOL-001' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'JITAI-1' STATION_ID from dual union allselect 'TOOL-003' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'JITAI-1' STATION_ID from dual union allselect 'TEST' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'S1' STATION_ID from dual union allselect 'TEST' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'S2' STATION_ID from dual union allselect 'TEST2' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'S1' STATION_ID from dual union allselect 'TEST2' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'S2' STATION_ID from dual
)
select wm_concat(distinct t.EQPT_ID) ids,entity_group_rrn, wm_concat(distinct t.station_id) ids2
from T_TEST t group by t.entity_group_rrn
但是由于官方不推荐使用 wm_concat ,所以尽量不要用此方法
oracle listagg如何去重相关推荐
- listagg结果去重
最近在一个项目中用到了listagg方法,但是在组合结果中出现有重复的情况.默认的结果如下 于是我就写了一个方法对listagg的结果去重,也可以对该格式的字符串去重,方法如下 create or r ...
- Oracle之字符串去重统计
需求:listagg去重,字符串去重,去重统计 select listagg(t.city, ',') within group(order by t.city),regexp_replace((li ...
- Oracle备份时发现空间不够,存储空间比较紧张的情况下,如何提升Oracle备份的去重率?...
nbu配置Oracle备份,有两种方式: 传统脚本方式, 就是创建1个备份脚本,policy调用这个脚本来备份 智能策略: 先从java console注册Oracle实例,在创建策略的时候直接通过注 ...
- Oracle 表数据去重
Oracle数据库中重复数据怎么去除?使用数据表的时候经常会出现重复的数据,那么要怎么删除呢?下面我们就来说一说去除Oracle数据库重复数据的问题.今天我们要说的有两种方法. 一.根据rowid来去 ...
- oracle对substr去重,oracle使用笔记
1.scott解锁 alter user scott identified by tiger; alter user scott account unlock; 2.导表 @d:/oracle/tab ...
- oracle over函数 去重,oracle over结合row_number分区进行数据去重处理
一.创建一个测试表A CREATE TABLE A( ID INT, NAME VARCHAR2(20) ); 二.向表中添加数据,且存在相同的数据 INSERT INTO A VALUES(1,'Y ...
- oracle listagg方法,Oracle实现字符串拼接和分离功能的方法(LISTAGG函数),oraclelistagg...
Oracle实现字符串拼接和分离功能的方法(LISTAGG函数),oraclelistagg 字符串拼接(String Aggregation Techniques)是数据处理时经常需要用到一个技术, ...
- MYSQL/ORACLE多字段去重-根据某字段去重
通过百度上的答案多数无效 自己搞了个 使用oracle row_number()函数,给每个同名的加一个序号,最后筛选第n个想同的即可 oracle与mysql不同 1.oracel 多字段disti ...
- ORACLE和MYSQL 去重查询
ORACLE // 去重查询 select * from(select 别名1.*, row_number() over(partition by 别名1.列名1 order by 别名1.列名2 A ...
最新文章
- php高级技术考试题,PHP高级技术考试题.doc
- java 系统 类_JAVA系统类 System的简单整理
- 小米登录协议分析_小米回应小米11充电头兼容问题
- react context_使用React Context API-入门
- 用计算机解决问题听课笔记,《计算机解决问题的过程》的教学设计
- php加入队列失败,Laravel队列使用中踩的坑,不报错但是队列一直再重试
- TensorFlow使用--MNIST分类学习(BP神经网络)
- docker搭建upload-labs
- 税控盘系统参数设置服务器,税控盘设置服务器地址
- 数据结构之斐波那契数列java实现
- win10磁盘占用率过高解决办法
- Prometheus+Grafana搭建Jmeter性能监控平台
- 【数据结构】顺序表详解 | 从零开始步步解读 | 画图理解并调试分析
- 关于DP和HDMI和VGA和RS232这几种接口的实用性和功能性分析
- FullCalendar-vue demo例子
- 布尔代数(Boolean Algebra)
- 贝叶斯基础理论及思想介绍
- 网络安全培训出来为什么比较好找工作?
- Rufus 制作U盘启动
- 红米k40pro+一键锁屏设置教程分享