首页 > 数据库 >ORACLE 去重

ORACLE 去重

时间:2023-01-12 10:57:23浏览次数:52  
标签:-- tablename t1 ORACLE N2 N3 select

-----------------------------------------------------------------------------模拟数据---------------------------------------------------------------------------
--创建测试数据及表结构

create table tablename(N1 varchar2(10), N2 varchar2(10), N3 varchar2(10));

insert into tablename 1, 2, 3 from dual union allselect 1, 2, 3 from dual union allselect 5, 2, 3 from dual union allselect 10, 20, 30 from dual ;commit;select*from tablename;

--数据集(针对指定列,查出去重后的结果集)
--N1 N2 N3
--1 2 3
--1 2 3
--5 2 3
--10 20 30

-----------------------------------------------------------------------------distinct-----------------------------------------------------------------------------
select distinct t1.* from tablename t1;
N1 N2 N3
10 20 30
1 2 3
5 2 3
--方法局限性很大,因为它只能对全部查询的列做去重。如果我想对N2,N3去重,那我的结果集中就只能有N2,N3列,而不能有N1列。

select distinct t1.N2, N3 from tablename t1
N2 N3
2 3
20 30
--不过它也是最简单易懂的写法。

-----------------------------------------------------------------------------row_number-----------------------------------------------------------------------------
select * from (select t1.*,
row_number() over(partition by t1.N2, t1.N3 order by 1) rn
from tablename t1) t1 where t1.rn = 1;

N1 N2 N3 RN
1 2 3 1
10 20 30 1
--写法上要麻烦不少,但是有更大的灵活性。

--针对指定列,查出所有重复的行
-----------------------------------------------------------------------------count having-----------------------------------------------------------------------------
select * from tablename t
where (t.N2, t.N3) in (select t1.N2, t1.N3
from tablename t1
group by t1.N2, t1.N3
having count(1) > 1)
N1 N2 N3
1 2 3
1 2 3
5 2 3
--要查两次表,效率会比较低。不推荐。
------------------------------------------------------------------------------count over----------------------------------------------------------------------------
select * from (select t1.*,
count(1) over(partition by t1.N2, t1.N3) rn
from tablename t1) t1 where t1.rn > 1;
N1 N2 N3 RN
1 2 3 3
1 2 3 3
5 2 3 3
--只需要查一次表,推荐。

标签:--,tablename,t1,ORACLE,N2,N3,select
From: https://www.cnblogs.com/snrj/p/17045797.html

相关文章

  • How to check character set in Oracle
    概述总结一下查询oracle字符集的方法解决方案方法一:SQL>SELECTvalue$FROMsys.props$WHEREname='NLS_CHARACTERSET';VALUE$----------------------------......
  • oracle 存储过程 for loop 定时任务
    记录。是这么个事,要实现一个需求,当人员表里的数据有更新后需要告知其他系统更新他们自己的人员数据。我想了一下,表里是有时间戳字段的,那我只要监听这个时间就行,拿到数据......
  • Oracle分页查询出现重复数据的解决方法
    在使用MybatisPlus分页功能时发现:前端查询第一页是没问题的,但是向后查询的时候数据始终是第一页的查询第一页的时候发现没有任何问题往后查询,比如查询第二页时数据......
  • oracle 多行合并成一行: listagg within group CONNECT BY 可以和递归方法一起使用查
    oracle多行合并成一行:listaggwithingroupCONNECTBY可以和递归方法一起使用查询路径:https://www.bbsmax.com/A/A7zgpjGYJ4/oracle多行合并成一行:listaggwit......
  • oracle的 listagg() WITHIN GROUP () 行转列函数的使用
    oracle的listagg()WITHINGROUP()行转列函数的使用https://blog.csdn.net/sinat_36257389/article/details/81004843如需转载请标明出处1.使用条件查询查询部门为......
  • oracle 情理归档日志
    1.相关日志su-oracle//进入oracle账户sqlplus/assysdba//以操作系统权限认证的oraclesys管理员登陆archiveloglist//查看数据库的归档模式注意:输入arc......
  • oracle merge into与sqlserver merge into 比较
    mergeinto:在两个表之间,根据与源表联接的结果,对目标表执行插入、更新或删除操作。Oracle在9i引入了mergeinto命令,SQLServer2008也引入mergeinto。不多说了,实例对比一......
  • 下载Oracle_BI_DW_AC_10.1.3.4.1_for_MicrosoftWindows_and_InformaticaPowerCenter_a
    oracle官方下载地址:​​https://edelivery.oracle.com/​​1.注册或登录,必须要注册账户,很简单,注册一个,很多软件可以下载,都很有用。2.注册登录后,选择中国:china-CN,对下......
  • ORACLE 内置基本函数
    /*ORACLE内置基本函数*/--【把字符串转换成小写】SELECTLOWER('StructuredQueryLanguage')ASVALUEFROMdual;--【把字符串转换成大写】SELECTUPPER('StructuredQu......
  • [Oracle19C 数据库管理] 创建PDB
    使用PDB$SEED模板创建PDB通过PDB$SEED创建PDB数据库,将会触发以下动作:将文件从PDB$SEED文件夹复制到新创建的PDB数据库文件夹中。创建表空间SYSTEMSYSAUXUNDO创......