最近在整理数据形成信用报告,发现重复的数据真的多,梳理都好久。我就做个笔记把去掉重复数据的方法整理下来。方便我后期查阅。

我将我目前已知的两种去重方法分为:视图去重和表去重。原理就是有无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如何用单字段或多字段进行查重的更多相关文章

  1. 用jquery在必填表单字段前加红星总结

    一.总结: 今天公司项目中要求给表单中的必填字段添加标记,因为表单字段比较多,后期又有可能某些字段会有变化,所以写了一段js代码来给表单添加标记. html代码: js代码: 关键步骤: 1.红星的设 ...

  2. 如何设置织梦cms自定义表单字段为必填项

    1.编辑器打开\plus\diy.php2.在40行左右找到此行代码:$dede_fields = empty($dede_fields) ? '' : trim($dede_fields);3.在这 ...

  3. 【小工具】根据定义的白名单字段进行Bean的拷贝

    背景 Bean的拷贝一直有一些类可以使用,比如Apache的org.apache.commons.beanutils.BeanUtils或者Spring的org.springframework.bea ...

  4. oracle数据库根据不同条件给同一字段修改相应的值:

    oracle数据库根据不同条件给同一字段修改相应的值: 例如:根据职务调整雇员的工资,如果职务为“SALESMAN”或者“ANALYST”工资上调100元,如果职务为“MANAGER”工资上调200元 ...

  5. 在Oracle 11g中用看Oracle的共享内存段---------IPCS

    很早之前,在一次讲课了,用了命令ipcs,发现oracle的共享内段好小,如下: oracle@mydb ~]$ ipcs -a ------ Shared Memory Segments ----- ...

  6. Oracle学习笔记:wm_concat函数合并字段

    在Oracle中使用wm_concat(column)可以实现字段的分组合并,逗号分隔. 例如,现有表temp_cwh_test: -- 创建临时表 create table temp_cwh_tes ...

  7. oracle 将当前系统时间戳插入timestamp字段

    oracle 将当前系统时间戳插入timestamp字段 --insert records 精确到秒:insert into userlogin_his(usrname,logintime) valu ...

  8. oracle 12c 新特性之不可见字段

    在Oracle 11g R1中,Oracle以不可见索引和虚拟字段的形式引入了一些不错的增强特性.继承前者并发扬光大,Oracle 12c 中引入了不可见字段思想.在之前的版本中,为了隐藏重要的数据字 ...

  9. 如何用SQL语句在指定字段前面插入新的字段?

    如何用SQL语句在指定字段前面插入新的字段? 2007-10-17 09:28:00|  分类: 笔记|举报|字号 订阅     create proc addcolumn @tablename va ...

随机推荐

  1. Delphi里面弹出对话框的方法

    1.procedure   ShowMessage(const   Msg:   string); 单元:Dialogsor   QDialogs 例子:showmessage( 'hello '); ...

  2. flutter WebView flutter js 互调

    通过webview 进行flutter 和js 的互调,页面可以放在其他网站 也可以放在本地,我这里放在本地进行测试. 1.引入webview_flutter: ^0.3.5+2 这个是官网推荐用的, ...

  3. ionic-CSS:ionic checkbox(复选框)

    ylbtech-ionic-CSS:ionic checkbox(复选框) 1.返回顶部 1. ionic checkbox(复选框) ionic 里面的 Checkbox 和普通的 Checkbox ...

  4. IDEA web 开发环境搭建

    最近由eclipse 换 IDEA ,记录下开发环境的搭建过程. 1 配置idea vim 既可以使用IDEA方便的代码提示和调试功能,又可以方便使用vim编辑文件,安装完成后显示为vim Emula ...

  5. MDK(KEIL) 两步解决 中文乱码 及 中文光标 半个半个跳的问题

    1. 如果已经用MDK(KEIL)的默认设置写了好多中文,那么先用notepad把文件一一打开然后转变编码格式为 utf-8 without ROM,如下: 2. 如果还没有开始编辑,或者已经用not ...

  6. spring data jpa使用 (转:http://www.manongjc.com/article/25284.html#four_1_7)

    Jap相关的使用 时间:2018-12-18 本文章向大家介绍Jap相关的使用,主要包括Jap相关的使用使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下. ...

  7. 13-Ubuntu-查阅终端命令版本信息和帮助信息

    查看版本信息: 终端命令 --version 查看帮助信息: 终端命令 --help 注: 待查阅的命令 后面有两个减号-- 例:查看终端命令ls的版本和帮助信息 ls --version ls -- ...

  8. 取地址栏query

    GetQueryParm () { var name, value       var str = window.location.href       var num = str.indexOf(' ...

  9. (十七)从UML角度来理解依赖

    UML软件建模 什么是依赖?简单理解就是一个类A用到了类B,但是这种使用关系是偶然性的.临时性的.非常弱的,类B的变化会影响到类A 显示依赖与隐式依赖 依赖倒置:我们要依赖于高层业务,不依赖于低层业务 ...

  10. Task ProgressBar模拟现实完成后显示TextBox

    private async void Form1_Load(object sender, EventArgs e) { progressBar1.Maximum = ; progressBar2.Ma ...