Oracle如何用单字段或多字段进行查重
最近在整理数据形成信用报告,发现重复的数据真的多,梳理都好久。我就做个笔记把去掉重复数据的方法整理下来。方便我后期查阅。
我将我目前已知的两种去重方法分为:视图去重和表去重。原理就是有无rowid这个字段。
单字段查重
表A:
| ID | name | uscc | money |
|---|---|---|---|
| 1 | 张飞 | 11111 | 100 |
| 2 | 关羽 | 22222 | 100 |
| 3 | 刘备 | 33333 | 300 |
| 4 | 马超 | 44444 | 400 |
| 5 | 张飞 | 55555 | 100 |
| 6 | 马超 | 44444 | 400 |
这时候,我们来进行去重:如果只根据一个字段来去重的话,根据name字段,我们看下重复的有两条数据为‘张飞’和‘马超’
这个时候我们用最简单的方法rowid。通俗易懂
select * from 表A where rowid in(
select max(rowid) from 表A group by NAME)
order by id;
| id | name | uscc | money |
|---|---|---|---|
| 1 | 张飞 | 11111 | 100 |
| 2 | 关羽 | 22222 | 100 |
| 3 | 刘备 | 33333 | 300 |
| 4 | 马超 | 44444 | 400 |
这个时候,数据就如上图所示。当name字段一样的时候,取rowid最大的保留。
上面那个是去重语句,下面说下查询表中的重复数据有哪些的语句
select * from 表A t,(select NAME from 表A group by NAME having count(1)>1) x
where t.NAME=x.NAME
order by t.id
| id | name | uscc | money |
|---|---|---|---|
| 1 | 张飞 | 11111 | 100 |
| 4 | 马超 | 44444 | 400 |
| 5 | 张飞 | 55555 | 100 |
| 6 | 马超 | 44444 | 400 |
但是呢,有的时候我们使用多张表整合的视图,进行去重,这时候就没有rowid了。我们要怎么去重呢?
select * from (select s.* from
(select t.*,row_number() over (partition by uscc order by uscc) as group_idx
from 表A t ) s
where s.group_idx = 1)
查询结果为:
| id | name | uscc | money |
|---|---|---|---|
| 1 | 张飞 | 11111 | 100 |
| 2 | 关羽 | 22222 | 100 |
| 3 | 刘备 | 33333 | 300 |
| 4 | 马超 | 44444 | 400 |
多字段查重
我们取NAME和USCC两个字段进行查重,因为很多时候,数据判断是否重复并不是一个字段就可以了,而且通过两个,甚至是一整条数据是否完全相同进行查重,这时候我们就用下面这个语句
select * from (select s.* from
(select t.*,row_number() over (partition by name,uscc order by name,uscc) as group_idx
from 表A t ) s
where s.group_idx = 1)
查询结果如下:
| ID | name | uscc | money |
|---|---|---|---|
| 1 | 张飞 | 11111 | 100 |
| 2 | 关羽 | 22222 | 100 |
| 3 | 刘备 | 33333 | 300 |
| 4 | 马超 | 44444 | 400 |
| 5 | 张飞 | 55555 | 100 |
ID=6的‘马超’这条数据进行了去重,因为这个条数据NAME和USCC都重复了,所以只取一条。
好记性不如烂笔头,虽然当时还记得怎么写,但是时间一长,就会忘记,如果没有良好的记录的习惯,下次还会百度找资料,很耽误时间。
Oracle如何用单字段或多字段进行查重的更多相关文章
- 用jquery在必填表单字段前加红星总结
一.总结: 今天公司项目中要求给表单中的必填字段添加标记,因为表单字段比较多,后期又有可能某些字段会有变化,所以写了一段js代码来给表单添加标记. html代码: js代码: 关键步骤: 1.红星的设 ...
- 如何设置织梦cms自定义表单字段为必填项
1.编辑器打开\plus\diy.php2.在40行左右找到此行代码:$dede_fields = empty($dede_fields) ? '' : trim($dede_fields);3.在这 ...
- 【小工具】根据定义的白名单字段进行Bean的拷贝
背景 Bean的拷贝一直有一些类可以使用,比如Apache的org.apache.commons.beanutils.BeanUtils或者Spring的org.springframework.bea ...
- oracle数据库根据不同条件给同一字段修改相应的值:
oracle数据库根据不同条件给同一字段修改相应的值: 例如:根据职务调整雇员的工资,如果职务为“SALESMAN”或者“ANALYST”工资上调100元,如果职务为“MANAGER”工资上调200元 ...
- 在Oracle 11g中用看Oracle的共享内存段---------IPCS
很早之前,在一次讲课了,用了命令ipcs,发现oracle的共享内段好小,如下: oracle@mydb ~]$ ipcs -a ------ Shared Memory Segments ----- ...
- Oracle学习笔记:wm_concat函数合并字段
在Oracle中使用wm_concat(column)可以实现字段的分组合并,逗号分隔. 例如,现有表temp_cwh_test: -- 创建临时表 create table temp_cwh_tes ...
- oracle 将当前系统时间戳插入timestamp字段
oracle 将当前系统时间戳插入timestamp字段 --insert records 精确到秒:insert into userlogin_his(usrname,logintime) valu ...
- oracle 12c 新特性之不可见字段
在Oracle 11g R1中,Oracle以不可见索引和虚拟字段的形式引入了一些不错的增强特性.继承前者并发扬光大,Oracle 12c 中引入了不可见字段思想.在之前的版本中,为了隐藏重要的数据字 ...
- 如何用SQL语句在指定字段前面插入新的字段?
如何用SQL语句在指定字段前面插入新的字段? 2007-10-17 09:28:00| 分类: 笔记|举报|字号 订阅 create proc addcolumn @tablename va ...
随机推荐
- Java中的线程Thread方法之---interrupt()
前几篇都介绍了Thread中的几个方法,相信大家都发现一个相似点,那就是sleep,join,wait这样的阻塞方法都必须捕获一个InterruptedException异常,顾名思义就是一个线程中断 ...
- [zz]使用OleDb,将Excel导入DataSet
本方法,将传入的Excel文件内所有的Sheet内的数据都填充入DataSet中.这是一个简单快捷的方法,不足之处是不适合带有格式复杂的Excel文件.(比如:有合并单元格的) public clas ...
- delphi基础篇之项目文件
delphi基础篇之项目文件 program Teacher2018; uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pa ...
- class11_messagebox 弹窗
最终的运行效果图(程序见序号2) #!/usr/bin/env python# -*- coding:utf-8 -*-# -------------------------------------- ...
- 27. USART, Universal synchronous asynchronous receiver transmitter
27.1 USART introduction 通用同步异步接收发射机(USART)对需要NRZ异步串行数据格式行业标准的外部设备,提供了一个灵活的全双工数据交换的方法.USART使用分数波特率生成器 ...
- [kuangbin带你飞]专题一 简单搜索 - M - 非常可乐
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i ...
- 2014 0416 word清楚项目黑点 输入矩阵 普通继承和虚继承 函数指针实现多态 强弱类型语言
1.word 如何清除项目黑点 选中文字区域,选择开始->样式->全部清除 2.公式编辑器输入矩阵 先输入方括号,接着选择格式->中间对齐,然后点下面红色框里的东西,组后输入数据 ...
- VB.NET利用正則表達式巧妙限制字符输入
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u010028869/article/details/37913867 在通常的程序设计中.对 ...
- 解决通过vmware克隆虚拟机后,无法上网的问题
注意:如果源主机是CentOS 6.8,复制出来的机器会出现无法上网. 如果源主机是CentOS 7,复制出来的机器可以正常上网.复制后,只要改下IP地址即可上网. 出现该问题的原因是,我们克隆后,将 ...
- log4j学习(二) 高并发logback
logback中常用的appender有ch.qos.logback.core.ConsoleAppender和ch.qos.logback.core.rolling.RollingFileAppen ...