sql - 在 Oracle 中使用 ROWNUM 或 ROW_NUMBER 删除重复记录
问题描述
我有 Oracle 11g。我有 4 条记录,我想使用 ROWNUM 或 ROW_NUMBER 删除重复记录。表如下。
ID | 姓名 | 部门 | 薪水 |
---|---|---|---|
100 | 尼基尔 | 产品 | 12000 |
100 | 尼基尔 | 产品 | 12000 |
200 | 约翰 | 人力资源 | 10000 |
200 | 约翰 | 人力资源 | 10000 |
我想要这样的输出
ID | 姓名 | 部门 | 薪水 |
---|---|---|---|
100 | 尼基尔 | 产品 | 12000 |
200 | 约翰 | 人力资源 | 10000 |
解决方案
Schema and insert statements:
create table salarytable (id int, name varchar(50), dept varchar(50), salary int);
insert into salarytable values(100 ,'nikhil','prod', 12000 );
insert into salarytable values(100, 'nikhil', 'prod', 12000);
insert into salarytable values(200, 'john', 'HR', 10000);
insert into salarytable values(200, 'john', 'HR', 10000);
Delete Query:
DELETE FROM salarytable
WHERE rowid not in
(SELECT MIN(rowid)
FROM salarytable
GROUP BY id ,name ,dept ,salary);
Select Query:
select * from salarytable;
Output:
ID | NAME | DEPT | SALARY |
---|---|---|---|
100 | nikhil | prod | 12000 |
200 | john | HR | 10000 |
db<>fiddle here
Delete duplicate with row_number()
Delete query with row_number():
delete from salarytable
where rowid in
( select rwid
from ( select rowid rwid
, row_number() over ( partition by id order by id) rn
from salarytable
)
where rn>1
)
Select Query:
select * from salarytable;
Output:
ID | NAME | DEPT | SALARY |
---|---|---|---|
100 | nikhil | prod | 12000 |
200 | john | HR | 10000 |
db<>fiddle here
推荐阅读
- angular - Websocket CORS错误Angular
- php - PHP 将列数据添加到表中 IF 条件为真
- javascript - 将数组与对象属性匹配
- email - 通过 Mailchimp 向具有特定标签的新订阅者发送电子邮件
- python - ModuleNotFoundError:没有名为“poetry.console”的模块
- django - DevOps 和 Azure 应用服务中的环境变量
- asp.net-core-mvc - 创建新的 ASP.NET Core 5 MVC 项目后,所有视图上的 CS0234 错误
- swift - 如何检测盒子对象和球之间的碰撞
- python - 在 Tkinter 中移动时标签闪烁
- python - 如何检查两个值之间的数据框系列的每个范围是否有另一个值