oracle怎么进行数据去重


去重方法:1、利用distinct关键字去重,语法“SELECT DISTINCT 字段名 FROM 表名;”;2、利用窗口函数row_number () over()去重;3、利用“group by”子句去重,语法“select 字段名 from 表名 group by 字段名;”;4、利用rowid进行伪列去重。

oracle怎么进行数据去重

本教程操作环境:Windows7系统、Oracle 11g版、Dell G3电脑。

业务场景

需要查询某数据,由于需要三张表关联查询,查询结果如下:

在这里插入图片描述
原始SQL语句

SELECT 
  D.ORDER_NUM AS "申请单号" ,
  D.CREATE_TIME ,
  D.EMP_NAME AS "申请人",
  (SELECT extractvalue(t1.row_data,'/root/row/FI13_wasteName')
  FROM dat_table_row t1
  WHERE d.document_id = t1.document_id
  AND t1.table_id     = 'dynamicRowsIdPTFLXX'
  ) AS "废料名称",
  (SELECT extractvalue(t1.row_data,'/root/row/FI13_units')
  FROM dat_table_row t1
  WHERE d.document_id = t1.document_id
  AND t1.table_id     = 'dynamicRowsIdPTFLXX'
  ) AS "单位",
  (SELECT extractvalue(t1.row_data,'/root/row/FI13_estimate')
  FROM dat_table_row t1
  WHERE d.document_id = t1.document_id
  AND t1.table_id     = 'dynamicRowsIdPTFLXX'
  ) AS "预估数量",
  (SELECT extractvalue(t1.row_data,'/root/row/FI13_stockRemoval')
  FROM dat_table_row t1
  WHERE d.document_id = t1.document_id
  AND t1.table_id     = 'dynamicRowsIdPTFLXX'
  ) AS "累计出库数量",
  (SELECT extractvalue(t1.row_data,'/root/row/FI13_receivingTime')
  FROM dat_table_row t1
  WHERE d.document_id = t1.document_id
  AND t1.table_id     = 'dynamicRowsIdCGYTX'
  ) AS "收购方收货时间",
  (SELECT extractvalue(t2.row_data,'/root/row/FI13_collectionTime')
  FROM dat_table_row t2
  WHERE d.document_id = t2.document_id
  AND t2.table_id     = 'dynamicRowsIdPTSJSKSJ'
  ) AS "实际收款时间"
FROM dat_document d,
  dat_table_row dtr
WHERE d.form_name       ='FI14'
AND d.document_id       =dtr.document_id
AND (D.DOCUMENT_STATUS != 'deleted'
OR D.DOCUMENT_STATUS   IS NULL )
  --AND TO_CHAR(d.create_time,'yyyy-MM-dd') BETWEEN '2025-01-01' AND '2025-03-26'
AND d.order_num = 'FI1420250708002' --FI1420250708002
ORDER BY d.CREATE_TIME DESC;

方法1:distinct去重

SELECT DISTINCT可以用来过滤结果集中的重复行,确保SELECT子句中返回指定的一列或多列的值是唯一的。

DISTINCT语句的语法如下:

SELECT DISTINCT column_1,
    column_2,
        ...
        FROM
    table_name;

示例:

SELECT 
  D.ORDER_NUM AS "申请单号" ,
  D.CREATE_TIME ,
  D.EMP_NAME AS "申请人",
  (SELECT extractvalue(t1.row_data,'/root/row/FI13_wasteName')
  FROM dat_table_row t1
  WHERE d.document_id = t1.document_id
  AND t1.table_id     = 'dynamicRowsIdPTFLXX'
  ) AS "废料名称",
  (SELECT extractvalue(t1.row_data,'/root/row/FI13_units')
  FROM dat_table_row t1
  WHERE d.document_id = t1.document_id
  AND t1.table_id     = 'dynamicRowsIdPTFLXX'
  ) AS "单位",
  (SELECT extractvalue(t1.row_data,'/root/row/FI13_estimate')
  FROM dat_table_row t1
  WHERE d.document_id = t1.document_id
  AND t1.table_id     = 'dynamicRowsIdPTFLXX'
  ) AS "预估数量",
  (SELECT extractvalue(t1.row_data,'/root/row/FI13_stockRemoval')
  FROM dat_table_row t1
  WHERE d.document_id = t1.document_id
  AND t1.table_id     = 'dynamicRowsIdPTFLXX'
  ) AS "累计出库数量",
  (SELECT extractvalue(t1.row_data,'/root/row/FI13_receivingTime')
  FROM dat_table_row t1
  WHERE d.document_id = t1.document_id
  AND t1.table_id     = 'dynamicRowsIdCGYTX'
  ) AS "收购方收货时间",
  (SELECT extractvalue(t2.row_data,'/root/row/FI13_collectionTime')
  FROM dat_table_row t2
  WHERE d.document_id = t2.document_id
  AND t2.table_id     = 'dynamicRowsIdPTSJSKSJ'
  ) AS "实际收款时间"
FROM dat_document d,
  dat_table_row dtr
WHERE d.form_name       ='FI14'
AND d.document_id       =dtr.document_id
AND (D.DOCUMENT_STATUS != 'deleted'
OR D.DOCUMENT_STATUS   IS NULL )
  --AND TO_CHAR(d.create_time,'yyyy-MM-dd') BETWEEN '2025-01-01' AND '2025-03-26'
AND d.order_num = 'FI1420250708002' --FI1420250708002
ORDER BY d.CREATE_TIME DESC;

注意:DISTINCT后面要跟ORDER BY的字段,Oracle先执行 DISTINCT去重后,再使用ORDER BY进行排序的。所以如果在ORDER BY需要排序的字段,没有在 distinct 后的字段中,自然会抛错。

报错信息如下:

一览妙笔 一览妙笔

自媒体、编剧、营销人员写作工具

一览妙笔 50 查看详情 一览妙笔

在这里插入图片描述

方法2:row_number() over()

语法格式

select * from
(select A.*, row_number() over(partition by A.name1 order by A.name12 desc) rn from A)
where rn = 1

示例

select * from (
select 
  d.order_num as "申请单号" ,
  d.create_time ,
  d.emp_name as "申请人",
  (select extractvalue(t1.row_data,'/root/row/FI13_wasteName')
  from dat_table_row t1
  where d.document_id = t1.document_id
  and t1.table_id     = 'dynamicRowsIdPTFLXX'
  ) as "废料名称",
  (select extractvalue(t1.row_data,'/root/row/FI13_units')
  from dat_table_row t1
  where d.document_id = t1.document_id
  and t1.table_id     = 'dynamicRowsIdPTFLXX'
  ) as "单位",
  (select extractvalue(t1.row_data,'/root/row/FI13_estimate')
  from dat_table_row t1
  where d.document_id = t1.document_id
  and t1.table_id     = 'dynamicRowsIdPTFLXX'
  ) as "预估数量",
  (select extractvalue(t1.row_data,'/root/row/FI13_stockRemoval')
  from dat_table_row t1
  where d.document_id = t1.document_id
  and t1.table_id     = 'dynamicRowsIdPTFLXX'
  ) as "累计出库数量",
  (select extractvalue(t1.row_data,'/root/row/FI13_receivingTime')
  from dat_table_row t1
  where d.document_id = t1.document_id
  and t1.table_id     = 'dynamicRowsIdCGYTX'
  ) as "收购方收货时间",
  (select extractvalue(t2.row_data,'/root/row/FI13_collectionTime')
  from dat_table_row t2
  where d.document_id = t2.document_id
  and t2.table_id     = 'dynamicRowsIdPTSJSKSJ'
  ) as "实际收款时间",
  row_number() over(partition by d.order_num  order by d.create_time desc) rn 
from dat_document d,
  dat_table_row dtr
where d.form_name       ='FI14'
and d.document_id       =dtr.document_id
and (d.document_status != 'deleted'
or d.document_status   is null )
  --AND TO_CHAR(d.create_time,'yyyy-MM-dd') BETWEEN '2025-01-01' AND '2025-03-26'
and d.order_num = 'FI1420250708002' --FI1420250708002
) where rn = 1;

查询结果
在这里插入图片描述

方法3:group by 

select 字段名 from 表名
group by 字段名;

方法4:利用rowid(伪列去重)

select id,name,age from test t1
where t1.rowid in (select min(rowid) from test t2 where t1.name=t2.name and t1.age=t2.age);

推荐教程:《Oracle教程》

以上就是oracle怎么进行数据去重的详细内容,更多请关注其它相关文章!


# 子句  # node.js seo  # 大石桥外包seo优化  # 网站建设业余培训  # 深圳网站优化搭建哪家好  # 网站运营推广方案企业  # 云南网站建设方案优化  # 宁波江北区微信营销推广  # 韩城市关键词seo排名优化  # 肥城网站推广排名  # 新浪网站seo分析  # oracle  # 如何设置  # 客户端  # 查询结果  # 怎么看  # 插入图片  # 收货  # 默认值  # 字段名  # 在这里 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 如何在CSS中使用过渡制作按钮边框渐变_border-color transition实现  Win11怎么设置分辨率 Win11显示设置调整分辨率及刷新率修改  《KARDS》冬季扩展包“国土阵线”上线!全新“协力”机制改变战场格局  iPhone 13 mini如何清理Safari缓存_iPhone 13 mini浏览器缓存清理方法  J*a中为什么强调组合优于继承_组合模式带来的灵活性与可维护性解析  AI图层蒙版怎么用_AI图层蒙版应用技巧与设计实例  《盗墓笔记手游》技能介绍  Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析  被称为海蜈蚣的海洋动物是  mysql导入sql文件能分批导入吗_mysql分批次导入大sql文件的实用技巧  Golang如何使用crypto/md5生成哈希_Golang MD5哈希生成方法  《长生:天机降世》火塔小怪大全  Magento 2 产品保存事件中安全更新属性的最佳实践  阿里云共享相册入口在哪  太平年在哪个平台播出  优化 WooCommerce 产品价格显示与自定义短代码集成  QQ阅读小说搜索入口地址_QQ阅读小说搜索入口地址搜索在线阅读  背部总是隐隐作痛怎么回事 背痛如何改善  Python项目中的条件导入:解决跨模块依赖问题  发布小红书怎么屏蔽粉丝?屏蔽粉丝能看到吗?  msn官方入口2025登录 msn官网2025直达首页入口  智慧团建活动报名入口 智慧团建活动报名入口手机端官网​  CSS动画如何实现图标旋转并放大_transform rotate scale @keyframes实现  电子白板帮助菜单使用指南  店铺如何做视频号推广?做视频号推广有用吗?  React应用中Commerce.js数据加载与状态管理最佳实践  服装短视频如何起号推广?服装短视频起号推广有什么要求?  汽水音乐车机版官网5.0 汽水音乐车机版5.0版本下载入口  12306APP选座怎么选充电位置_12306APP带充电插座座位选择方法与技巧  《随手记》备份数据方法  TikTok笔记文字无法编辑如何解决 TikTok笔记文字编辑优化方法  《腾讯相册管家》注销账号方法  uc浏览器官网网页版使用 uc浏览器官网免费在线首页  如何查询国外邮政编码_国外邮政编码查询的多种有效途径  解决jQuery多计算器输入字段冲突的教程  CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程  以下哪一项是古代兵书三十六计中的计谋  Animex动漫社正版在线入口 Animex动漫社动漫官方观看网  批改网官网首页登录 批改网学生用户登录入口  解决Flex容器横向滚动内容截断与偏移问题  c++如何使用std::thread::join和detach_c++线程生命周期管理  C++如何实现单例模式_C++线程安全的单例模式写法  rabbitmq 持久化有什么缺点?  mysql怎么导入sql文件_mysql导入sql文件的方法与技巧  《淘票票》添加到苹果钱包教程  海棠阅读网页版_进入海棠网页版在线阅读中心  J*aScript类型数组_TypedArray使用  win11怎么更改账户类型 Win11标准用户和管理员权限切换【教程】  Excel如何快速合并单元格内容_Excel文本合并与函数操作技巧  C++ cast类型转换总结_C++ reinterpret_cast与const_cast的使用 

 2023-01-04

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.