oracle数据库去除重复数据


Posted in Oracle onMay 20, 2022

创建测试数据

create table nayi224_180824(col_1 varchar2(10), col_2 varchar2(10), col_3 varchar2(10));
insert into nayi224_180824
select 1, 2, 3 from dual union all
select 1, 2, 3 from dual union all
select 5, 2, 3 from dual union all
select 10, 20, 30 from dual ;
commit;
select*from nayi224_180824;
COL_1 COL_2 COL_3
1 2 3
1 2 3
5 2 3
10 20 30

针对指定列,查出去重后的结果集

distinct

select distinct t1.* from nayi224_180824 t1;
COL_1 COL_2 COL_3
10 20 30
1 2 3
5 2 3

方法局限性很大,因为它只能对全部查询的列做去重。如果我想对col_2,col3去重,那我的结果集中就只能有col_2,col_3列,而不能有col_1列。

select distinct t1.col_2, col_3 from nayi224_180824 t1
COL_2 COL_3
2 3
20 30

不过它也是最简单易懂的写法。

row_number()

select *
  from (select t1.*,
               row_number() over(partition by t1.col_2, t1.col_3 order by 1) rn
          from nayi224_180824 t1) t1
 where t1.rn = 1
;
COL_1 COL_2 COL_3 RN
1 2 3 1
10 20 30 1

写法上要麻烦不少,但是有更大的灵活性。

针对指定列,查出所有重复的行

count having

select *
  from nayi224_180824 t
 where (t.col_2, t.col_3) in (select t1.col_2, t1.col_3
                                from nayi224_180824 t1
                               group by t1.col_2, t1.col_3
                              having count(1) > 1)
COL_1 COL_2 COL_3
1 2 3
1 2 3
5 2 3

要查两次表,效率会比较低。不推荐。

count over

select *
  from (select t1.*,
               count(1) over(partition by t1.col_2, t1.col_3) rn
          from nayi224_180824 t1) t1
 where t1.rn > 1
;
COL_1 COL_2 COL_3 RN
1 2 3 3
1 2 3 3
5 2 3 3

只需要查一次表,推荐。

删除所有重复的行

delete from nayi224_180824 t
 where t.rowid in (
                   select rid
                     from (select t1.rowid rid,
                                   count(1) over(partition by t1.col_2, t1.col_3) rn
                              from nayi224_180824 t1) t1
                    where t1.rn > 1);

就是上面的语句稍作修改。

删除重复数据并保留一条

分析函数法

delete from nayi224_180824 t
 where t.rowid in (select rid
                     from (select t1.rowid rid,
                                  row_number() over(partition by t1.col_2, t1.col_3 order by 1) rn
                             from nayi224_180824 t1) t1
                    where t1.rn > 1);

拥有分析函数一贯的灵活性高的特点。可以为所欲为的分组,并通过改变orderby从句来达到像”保留最大id“这样的要求。

group by

delete from nayi224_180824 t
 where t.rowid not in
       (select max(rowid) from nayi224_180824 t1 group by t1.col_2, t1.col_3);

牺牲了一部分灵活性,换来了更高的效率。

总结

到此这篇关于oracle数据库去除重复数据常用的文章就介绍到这了!


Tags in this post...

Oracle 相关文章推荐
ORACLE数据库对long类型字段进行模糊匹配的解决思路
Apr 07 Oracle
Oracle 数据仓库ETL技术之多表插入语句的示例详解
Apr 12 Oracle
oracle覆盖导入dmp文件的2种方法
May 21 Oracle
Oracle创建只读账号的详细步骤
Jun 07 Oracle
ORACLE查看当前账号的相关信息
Jun 18 Oracle
C#连接ORACLE出现乱码问题的解决方法
Oct 05 Oracle
关于Oracle12C默认用户名system密码不正确的解决方案
Oct 16 Oracle
oracle删除超过N天数据脚本的方法
Feb 28 Oracle
分析SQL窗口函数之排名窗口函数
Apr 21 Oracle
Oracle用户管理及赋权
Apr 24 Oracle
清空 Oracle 安装记录并重新安装
Apr 26 Oracle
Oracle数据库事务的开启与结束详解
Jun 25 Oracle
解决Oracle数据库用户密码过期
May 11 #Oracle
Oracle中DBLink的详细介绍
instantclient客户端 连接oracle数据库
清空 Oracle 安装记录并重新安装
SQL试题 使用窗口函数选出连续3天登录的用户
Oracle用户管理及赋权
Apr 24 #Oracle
分析SQL窗口函数之取值窗口函数
Apr 21 #Oracle
You might like
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
2007/03/15 PHP
ThinkPHP的Widget扩展实例
2014/06/19 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
2018/11/22 PHP
js tab 选项卡
2009/04/26 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
document.addEventListener使用介绍
2014/03/07 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
2015/09/04 Javascript
NodeJS整合银联网关支付(DEMO)
2016/11/09 NodeJs
关于ES6的六个小特性(二)
2017/02/20 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
2020/03/14 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
js实现扫雷源代码
2020/11/27 Javascript
python实现网站的模拟登录
2016/01/04 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
python实现上传下载文件功能
2020/11/19 Python
python3.4爬虫demo
2019/01/22 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
python 利用zmail库发送邮件
2020/09/11 Python
python如何绘制疫情图
2020/09/16 Python
怎样实现H5+CSS3手指滑动切换图片的示例代码
2019/05/05 HTML / CSS
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
新西兰购物网站:TheMarket NZ
2020/09/19 全球购物
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
群众路线党员个人整改措施
2014/10/27 职场文书
python tqdm用法及实例详解
2021/06/16 Python
GTX1650super好不好 gtx1650super显卡属于什么级别
2022/04/08 数码科技