删除表里重复数据

查询重复数据

select count(*) from (select *,ROW_NUMBER () over (partition by 分组字段 order by 排序字段 desc)RANK1 from 表名)where RANK1 >  1;
例如:
select *,ROW_NUMBER OVER (PARTITION BY NAME,SUBCONAM order by inputime desc)rank1 from TEST)where rank1=1;

根据id删除重复数据

delete from 表名 where ID in(select ID fromselect id,ROW_NUMBER () over (partition by 分组字段1,分组字段2,分组字段3, order by edsinputime desc)RANK from 表名)where RANK >  1)

一模一样的数据删除
rownum/rowid:删除重复数据

top-n问题
rownum:是伪列,表示查询结果的行号。
1.一旦生成就不会变化(相同的sql语句 )。 2.rownum只能使用<=或< 或=,不能使用>=或>
查询工资最高的前3个员工
select rownum, t.* from(select rownum,e.empno,e.ename,e.sal from emp e order by sal desc) t where rownum <=3;

通用写法:select rownum,… from(select * from xx order by …) where rownum <= n;

create table mystudent(
stuno number,
stuname varchar2(10),
stuage number
);

insert into mystudent values(1,‘zs’,23) ;
insert into mystudent values(1,‘zs’,23) ;

insert into mystudent values(2,‘ls’,24) ;
insert into mystudent values(2,‘ls’,24) ;

insert into mystudent values(3,‘ww’,25) ;
insert into mystudent values(3,‘ww’,25) ;

insert into mystudent values(4,‘zl’,26) ;

delete from mystudent where stuno in(
select distinct stuno from mystudent);

去重:distinct

rowid:根据插入的顺序 依次递增

rownum:逻辑伪列

数据对象(数据文件(数据块(行)))
rowid:物理伪列(数据连续的),18位:
前6位: 数据对象编号
依次往后数3位:数据文件编号
依次往后数6位:数据块编号
依次往后数3:行号
思路:
根据编号分组(将重复的数据 放到一组) ,然后在每组中只保留一个

删除重复数据:保留rowid最小的
delete from mystudent where rowid not in (select min(rowid) from mystudent group by stuno );

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值