Oracle 系列数据库使用 listagg去重,删除重复数据的几种方法

news2024/11/24 20:40:44

listagg聚合之后很多重复数据,下面是解决重复数据问题
在这里插入图片描述

案例表

create table "dept_tag_info"
(
"tag_id" bigint not null,
"tag_code" varchar(200),
"tag_name" varchar(500),
"tag_level" varchar(200),
"parent_id" bigint,
"gmt_create" datetime(6),
"create_by" varchar(50),
"update_by" varchar(50),
"gmt_modified" datetime(6),
"del_flag" char(1),
"sort" integer,
"multiple_choice" char(1),
"relation_dept_category" varchar(500),
"tips_text" varchar(2000),
"remarks" varchar(500),
"enabled" char(1),
constraint "dept_tag_info_new_pk" not cluster primary key("tag_id")) storage(on "ctbiyi_data_v3", clusterbtr) ;
comment on table "dept_tag_info" is '企业标签基础信息表';
comment on column "dept_tag_info"."tag_id" is '主键';
comment on column "dept_tag_info"."tag_code" is '标签编码';
comment on column "dept_tag_info"."tag_name" is '标签名称';
comment on column "dept_tag_info"."tag_level" is '标签层级';
comment on column "dept_tag_info"."parent_id" is '父节点编码id';
comment on column "dept_tag_info"."gmt_create" is '创建时间';
comment on column "dept_tag_info"."create_by" is '创建人';
comment on column "dept_tag_info"."update_by" is '修改人';
comment on column "dept_tag_info"."gmt_modified" is '修改时间';
comment on column "dept_tag_info"."del_flag" is '删除标记 0-未删除 1-已删除';
comment on column "dept_tag_info"."sort" is '排序';
comment on column "dept_tag_info"."multiple_choice" is '多选(1是 0否)';
comment on column "dept_tag_info"."relation_dept_category" is '关联主体';

为了方便大家看所以所有小写

    select 
    t.tag_code,
    t.tag_name,
    listagg(t.tag_level, ',') within group(order by t.tag_level) as tag_levels
from 
    dept_tag_info t
group by 
    t.tag_code, 
    t.tag_name;

第一种:使用wm_concat() + distinct去重聚合

select 
    t.tag_code,
    t.tag_name,
    wm_concat(distinct t.tag_level) as tag_levels
from 
    dept_tag_info t
group by 
    t.tag_code, 
    t.tag_name;

第二种:使用listagg,先去重,再聚合

select 
    t.tag_code,
    t.tag_name,
    listagg(t.tag_level, ',') within group(order by t.tag_level) as tag_levels
from 
    (select distinct s.tag_code, s.tag_name, s.tag_level
     from dept_tag_info s) t
group by 
    t.tag_code, 
    t.tag_name;

第三种:xmlagg(xmlparse(content t.tag_level || ‘,’ wellformed) order by t.tag_level):使用 xmlagg 和 xmlparse 函数将 tag_level 字段聚合为一个用逗号分隔的字符串,并按 tag_level 排序。
getclobval():将 xml 类型的结果转换为 clob(character large object)。
rtrim(…, ‘,’):去掉聚合结果末尾的逗号。
内部子查询 select distinct s.tag_code, s.tag_name, s.tag_level from dynamic_ctbiyi_v3.dept_tag_info s:
选择唯一的 tag_code、tag_name 和 tag_level

select 
    t.tag_code,
    t.tag_name,
    rtrim(
        xmlagg(
            xmlparse(content t.tag_level || ',' wellformed)
            order by t.tag_level
        ).getclobval(), 
        ','
    ) as tag_levels
from 
    (select distinct s.tag_code, s.tag_name, s.tag_level
     from dept_tag_info s) t
group by 
    t.tag_code, 
    t.tag_name;
    

listagg 的优缺点

优点:
简洁和易用:LISTAGG 语法简单,易于理解和使用。
性能较好:在许多情况下,LISTAGG 的执行速度会快于 XMLAGG,尤其是在处理较少数据量时。
排序:支持在聚合过程中对字符串进行排序,使用 WITHIN GROUP 子句。
缺点:
字符串长度限制:LISTAGG 生成的字符串长度不能超过 4000 字符,如果超过这个限制,会抛出错误。
无格式化功能:LISTAGG 仅限于字符串连接,不支持更复杂的格式化。
xmlagg 的优缺点
优点:
字符串长度更大:XMLAGG 可以处理比 LISTAGG 更大的字符串,因为生成的结果是 CLOB 类型,不受 4000 字符的限制。
灵活性:支持更复杂的 XML 处理和格式化功能,适合需要复杂字符串操作的场景。
缺点:
性能问题:在处理大量数据时,XMLAGG 可能比 LISTAGG 慢,因为涉及到 XML 解析和处理。
复杂性:语法相对复杂,使用起来不如 LISTAGG 简单。
使用 LISTAGG:当聚合后的字符串长度不超过 4000 字符时,并且只需要简单的字符串连接和排序。
使用 XMLAGG:当聚合后的字符串长度可能超过 4000 字符,或者需要更复杂的格式化和处理时。
根据具体需求选择合适的函数可以在保证代码简洁性和执行效率的同时,满足业务需求。

手动处理重复数据的一种快捷安全的方式

-- 查找重复记录
select "tag_id", count(*) as cnt
from dept_tag_info
group by "tag_id"
having count(*) > 1
order by cnt desc;

主删除语句:

delete from dept_tag_info t
where t.rowid in (
    select rid
    from (
        select t1.rowid as rid, row_number() over (partition by t1.tag_code, t1.tag_name order by 1) as rn
        from dept_tag_info t1
    ) t2
    where t2.rn > 1
);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1830555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决ubuntu22.04共享文件夹问题

刚开机发现ubuntu里面的共享文件夹访问不了了 ubuntuwxy:/mnt/hgfs$ ls找了几篇博客,设置如下指令即可,记得退出当前目录重新进入刷新一下 sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o allow_other -o uid1000 仅供参考

数据库入门知识点

目录 常见简答问题 数据库系统概述 1.数据库基本概念 2.数据库系统的特点 3.DBMS 的主要功能? 4.数据库系统组成 5.数据库的三级模式定义 6.数据库两级映像的作用? 信息与数据模型 1.信息的三种世界是什么?彼此之间的联系是什么? 2.数据模型的三个要素: 3.数据库…

VL53L4CD TOF开发(4)----单次测量(One-Shot)模式

VL53L4CD TOF开发.4--单次测量(One-Shot)模式 概述视频教学样品申请完整代码下载实现demo硬件准备技术规格系统框图应用示意图生成STM32CUBEMX选择MCU串口配置IIC配置 XSHUTGPIO1X-CUBE-TOF1app_tof.c详细解释主程序演示结果 概述 最近在弄ST和瑞萨RA的…

展会预热|邀您共赴2024华南国际工业展览会

展会预告 在数字化转型的浪潮中,广东盘古信息科技股份有限公司(以下简称“盘古信息”)作为工业软件业内的领军企业,为制造企业提供全面的数字化生产制造运营管理系统及系统集成解决方案。我们将于2024年6月19日至21日亮相华南工博…

Nuxt3 实战 (九):使用 Supabase 实现 Github 认证鉴权

前言 Supabase 使用的是 postgresql 的 Row Level Security (RLS),可以限制不同用户对同一张表的不同数据行的访问权限。这种安全机制可以确保只有授权用户才能访问其所需要的数据行,保护敏感数据免受未授权的访问和操作。 Auth Providers 打开 Supab…

图知识蒸馏综述:算法分类与应用分析

源自:软件学报 作者:陈哲涵 黎学臻 注:若出现无法显示完全的情况,可 V 搜索“人工智能技术与咨询”查看完整文章 摘 要 图数据, 如引文网络, 社交网络和交通网络, 广泛地存在现实生活中. 图神经网络凭借强大的表现力受到广泛…

5月70城房价:一线城市新建房价格唯上海反弹 二手房全线降幅扩大 M1下行的根源:地方政府压降债务

5月份,一线城市新建商品住宅销售价格同比下降3.2%,降幅比上月扩大0.7个百分点。其中,北京、广州和深圳分别下降1.8%、8.3%和7.4%,上海上涨4.5%。 2024年5月份,70个大中城市中,各线城市商品住宅销售价格环比…

Linux 下VS Code 弹出 快速修复,导致 BackSpace 无法删除

最近在Linux下使用VSCode,发现有错误的代码选中了无法删除 这个时候,你按BackSpace 是无法删除的,很恼火! 把这个禁用了之后,就不会弹出这个框,这样可以顺利选中删除! 感觉这个是不是vs code 插…

聚观早报 | GPT-4通过图灵测试;哪吒新车将交付

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 6月17日消息 GPT-4通过图灵测试 哪吒新车将交付 SpaceX星舰将进行第五次试飞 马斯克称新款Roadster可以飞 华为…

跨平台兼容性优化:确保短剧APP小程序在不同系统上的稳定运行(二)

在上一篇帖子中,我们初步探讨了跨平台兼容性优化的重要性以及不同操作系统和设备对小程序的影响。本篇帖子将进一步深入分析如何优化代码和界面布局,以确保短剧APP小程序在不同平台上都能稳定运行。 一、代码优化策略 减少依赖和冗余:确保代…

Office办公软件如何下载安装?Office 2021最佳的办公软件安装包资源分享!

Office软件这种文档格式的普及,得益于其高度的兼容性和通用性,使得用户能够轻松地在不同的电脑和平台上打开和编辑文件。 Office软件文档格式的通用性,意味着无论是Windows、macOS还是Linux等操作系统,用户都能无障碍地打开和浏览…

triton矩阵乘以及缓存优化

这里triton.cdiv(M, META[BLOCK_SIZE_M]) * triton.cdiv(N, META[BLOCK_SIZE_N]),所以grid的形状是一维的。 观察函数内部 pid tl.program_id(axis0),因为grid是一维的,所以这里就是总块数,我们假设实际A*BC, A&…

2024文件找回:怎么恢复删除的数据?6种实用的数据恢复汇总锦集!

怎么恢复删除的数据?在当今数字化的时代,我们的电脑中存储了大量的重要数据,一旦数据丢失,可能会对我们的工作和生活造成极大的困扰。因此,掌握一些有效的电脑数据恢复方法是非常必要的。下面,我将介绍六种…

【仿真建模-anylogic】Port原理解析

Author:赵志乾 Date:2024-06-14 Declaration:All Right Reserved!!! 1. 类图 2. 原理解析 2.1 核心函数: Port作为各类型端口的基类,其核心方法如下 : 函数功能Port(A…

Github 2024-06-17 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-17统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量JavaScript项目3Python项目3C++项目3Rust项目1C#项目1Tcl项目1Java项目1TypeScript项目1Godot引擎 – 多平台2D和3D游戏引擎 创建周期:3817 天…

Suno新技能亮相:完美复刻歌手音色,我甚至不敢公开!

之前写过一篇文章 颠覆音乐创作! Suno史诗级更新,随便哼哼就能出一首好听的歌曲? Suno支持上传一段音频或者自己的哼唱进行续创歌曲,这个功能大家有玩出花样嘛? 可能很多人,还不知道这个到底有啥用! 大家先看看这首《满…

天翼云认证高级解决方案架构师,回忆题库,刚刚出炉,建议收藏

天翼云毕竟是国家队的 面向的都是大市场 虽然起步晚 但是人家底子厚,厚积薄发,且是央资背景,做的都是大项目 这种势下,学习且考出几个天翼云认证,那得安排上,以便以后跳槽,涨薪,…

《天软股票特色因子定期报告》

最新《天软股票特色因子定期报告》(2024-06),抢先发布 内容概要如下: 天软特色因子A08006(近一月日度买卖压力2)从行业角度分析,在电子设备、石油石化行业表现稳定,无论在有效性、区…

【ARM】MDK Debug模式下Disassembly窗口介绍

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 主要了解Disassembly窗口中包含的内容,和如何利用Disassembly中的内容了解程序的存储和调用情况。 2、 问题场景 对于Disassembly窗口中具体包含的内容不了解,无法合理地应用Disassembly窗口…

[数据集][目标检测]减速区域检测数据集VOC+YOLO格式1654张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1654 标注数量(xml文件个数):1654 标注数量(txt文件个数):1654 标注…