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 ...
随机推荐
- yolov1代码阅读
yolov1使用的backbone是由GoogLeNet启发而来,有24个卷积层,最后接2个全连接层,详细结构如下图: 检测网络的输入分辨率是448X448,最后的特征图大小为7X7.在特征图的每一个 ...
- 过滤'and','or' ''' '*' '=' ‘select’下的注入
遇到一个站:http://www.马赛克.net/intro.aspx?id=6 加了单引号 http://www.马赛克.net/intro.aspx?id=6‘ 页面无变化 加了双引号 h ...
- CSS如何让文字垂直居中?
在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...
- socket的多线程实现
步骤: 1.服务端创建ServerSocket,循环调用accept()等待客户端连接: 2.客户端创建socket并请求与服务端对话: 3.服务端接收客户端的请求,创建socket与客户端进行专线连 ...
- python 19 lambda函数
转自http://www.cnblogs.com/BeginMan/p/3178103.html 一.lambda函数 1.lambda函数基础: lambda函数也叫匿名函数,即,函数没有具体的名称 ...
- Crane /// 向量旋转+线段树
题目大意: 给定n条首尾相接的线段的长度 第一条从0,0开始,所有线段垂直与x轴向上延伸 给定c次操作 每次操作给定 s,a 使得 由第s条线段的角度 逆时针旋转a后 达到第s+1条线段的角度 每次操 ...
- Jmeter---参数化之用户参数
总结: 参数化几次就要设置几个线程,执行的时候,是按顺序执行,下面的请求也会跟着请求
- Soci介绍
soci是一个用C++封装的数据库访问库,目前通过 “前端(应用程序)/核心/后端(数据库适配)”模式支持firebird,mysql,sqlite3,oracle,postgresql,odbc多种 ...
- Spring-Boot中如何使用多线程处理任务
看到这个标题,相信不少人会感到疑惑,回忆你们自己的场景会发现,在Spring的项目中很少有使用多线程处理任务的,没错,大多数时候我们都是使用Spring MVC开发的web项目,默认的Controll ...
- java OOP第二章_封装
一. 封装: 属性通过private访问修饰符将其设置为私有的,只有当前类中可以访问,同时提供通过public访问修饰符的公共方法可以给任何类中访问. 通常针对属性提供公共的setter方法进行赋值, ...