实际工作中,我们经常会遇到一些特殊情况导致数据double,这个时候去清理起来会很麻烦,记录一下重复数据处理的全过程吧,希望对你们有帮助。

       最近带着一个实习生,每天都被弄得很烦,就在这里多唠叨两句,希望大家活学活用,不说太宽泛吧,至少作为一个开发者,你的思维永远不要被局限,要灵活,更多的时候我们是要去学习思维模式,学的是一种思想,而不是死记硬背代码块,代码是多变的,但思想学到了才是真的学到了哦。 

本文中的数据清理步骤大致如下:

                1:找到重复的数据
                2:取出重复数据的数据行所有字段值
                3:在所有的重复的数据中分组取出最小的id
                4:删除属于重复的数据集合并且id不是最小值的id集合里面的数据

 我给出的是实际操作的示例,希望在实际使用当中活学活用哦。

 1. 首先我们先创建一个这样的测试环境表及数据吧。

mysql 将重复的求和_mysql 将重复的求和

2. 接下来研究如何做到删除重复的数据行并且仅保留第一条id最小的记录。 首先需要知道哪一列是重复的,所以首先筛选出重复的列。从查询上来看,我们的最高值【updata】字段数据应该重复了,那么我们根据单字段来看具体重复的数据是哪些。

-- 查询表中重复的列数据 select updata from test_demo group by updata having count(updata)>1

mysql 将重复的求和_mysql_02


3. 那么我们只查询重复的值的话好像不太够用,接下来我们查询重复的列对应的数据行的所有记录。

-- 查询表中重复列对应行的所有数据 select * from test_demo where updata in(select updata from test_demo group by updata having count(updata)>1)

mysql 将重复的求和_数据库_03


4. 然后我们需要筛选出id最小的,以便于后面去除的时候可以保留id最小的行数据,这里的话提供的是一种思路,其实在实际数据处理中我们也可以根据时间、row_num()等等字段来制定我们后面去重的依据。

-- 找到所有的重复数据中最小的id select min(id) from (select * from test_demo where updata in(select updata from test_demo group by updata having count(updata)>1)) t

mysql 将重复的求和_数据_04

5. 我们重复的数据也能查出来,最下的id值也能查出来,接下来就是数据清理了,将我们表中重复的数据全部给他delete就好咯。

-- 删除重复数据保留id最小的一条 DELETE FROM `test_demo` WHERE updata IN ( SELECT t.updata FROM (( SELECT updata FROM `test_demo` GROUP BY updata HAVING count( updata )> 1 ) t )) AND id NOT IN ( SELECT aaa.id FROM ( SELECT min( id ) AS id FROM ( SELECT id FROM `test_demo` WHERE `test_demo`.updata IN ( SELECT updata FROM `test_demo` GROUP BY updata HAVING count( updata )> 1 )) s ) aaa );

mysql 将重复的求和_mysql 将重复的求和_05

6.删除完我们在来查看一下数据,做一下验证,可以看到,重复的数据已经被清理干净了,并且保留了id最小的一条。

mysql 将重复的求和_mysql_06

粉丝答疑:

最近有小伙伴在后台私聊我问有么有什么好用的文本编辑器,在这里就做一下拓展延申吧。

 其实我个人的话还是推荐notepad++这个软件,说实话在使用起来很方便的,比如说自带的多语言设置、Bse64Encode加密、Base64Decode解密、编码格式直接转换等等,后续可以自行研究哦。

mysql 将重复的求和_mysql_07

资源链接:https://pan.baidu.com/s/1CN2T9CfpRSCdKPibppHnIw?pwd=pgv5 
提取码:pgv5