美文网首页数据库知识点
sql技巧(二)去除重复记录

sql技巧(二)去除重复记录

作者: 洛水青柳2017 | 来源:发表于2017-09-18 20:47 被阅读0次

导读:在数据库的处理工作,会遇到重复记录的问题,会影响数据的分析结果的准确性,今天我们探讨一下在数据库中对重复记录的操作;

示例数据如下我们可以看到一个name有两条记录,有的是英语成绩不一样(zhangsan),有的是math成绩不一样(wangwu),有的是两个都不一样(zhaoliu),有的是记录完全一致(lisi),针对不同的记录重复情况有不同的处理办法。(原则为保留该科目最高成绩为最终成绩,即删除成绩较低的行,记录相同保留最近一条记录,number更大的,记录都不相同则取数学成绩高的记录)

示例数据       示例结果

首先要找出重复的记录

    SELECT name  FROM  repeat_nums  GROUP BY  name  HAVING COUNT(1) >1

有重复成绩的学生

1.处理两条记录完全一致的情况

①找出要删除的行

SELECT  * FROM  repeat_nums

WHERE  name in (SELECT name  FROM  repeat_nums  GROUP BY  name ,math,english HAVING COUNT(1) >1)

AND    number in (SELECT min(number)  FROM  repeat_nums  GROUP BY  name  HAVING COUNT(1) >1)

② 删除    把 select 改为delete 

2.处理有一个字段重复的情况

SELECT  * FROM  repeat_nums

WHERE  CAST(name as VARCHAR ) + CAST(math as VARCHAR)+ CAST(english as VARCHAR)

in (SELECT CAST(name as VARCHAR ) +CAST(min(math) as VARCHAR)+ CAST(min (english) as VARCHAR)  FROM  repeat_nums  GROUP BY  name  HAVING COUNT(1) >1)

①找出要删除的行

② 删除    把 select 改为delete

3.处理两个字段都不一致的情况(选择数学成绩好的记录)

①找出要删除的行(name)

SELECT  name  FROM  repeat_nums  as  a

WHERE  CAST(math as VARCHAR)+ CAST(english as VARCHAR)  not in

(SELECT  CAST(min(math) as VARCHAR)+ CAST(min(english) as VARCHAR)  FROM  repeat_nums  GROUP BY  name  HAVING COUNT(1) >1)

and

CAST(math as VARCHAR)+ CAST(english as VARCHAR)  not in

(SELECT CAST(max(math) as VARCHAR)+ CAST(max(english) as VARCHAR)  FROM  repeat_nums  GROUP BY  name  HAVING COUNT(1) >1)

and

name in (SELECT name  FROM  repeat_nums  GROUP BY  name  HAVING COUNT(1) >1)

② 删除

DELETE  FROM  repeat_nums  as a  WHERE name in

(SELECT  name  FROM  repeat_nums  as  a

WHERE  CAST(math as VARCHAR)+ CAST(english as VARCHAR)  not in

(SELECT  CAST(min(math) as VARCHAR)+ CAST(min(english) as VARCHAR)  FROM  repeat_nums  GROUP BY  name  HAVING COUNT(1) >1)

and

CAST(math as VARCHAR)+ CAST(english as VARCHAR)  not in

(SELECT CAST(max(math) as VARCHAR)+ CAST(max(english) as VARCHAR)  FROM  repeat_nums  GROUP BY  name  HAVING COUNT(1) >1)

and

name in (SELECT name  FROM  repeat_nums  GROUP BY  name  HAVING COUNT(1) >1))

AND  MATh  in (SELECT min(MATH) FROM  repeat_nums  GROUP BY  name  HAVING COUNT(1) >1)

相关文章

  • sql技巧(二)去除重复记录

    导读:在数据库的处理工作,会遇到重复记录的问题,会影响数据的分析结果的准确性,今天我们探讨一下在数据库中对重复记录...

  • 数据库表的基本操作DQL2

    #字段控制查询 去除重复记录 去除重复记录(两行或两行以上记录中系列的上的数据都相同),例如emp表中sa...

  • oracle查询重复数据方法

    SQL重复记录查询 (一) 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 2、删除...

  • mysql查询

    字段控制查询去除重复记录: 查询所有学生name信息,去除重复信息 SELECT DISTINCT name FR...

  • Mysql操作——DQL-4-字段控制查询

    去除重复记录 select distinct name from students; 2.对查询字段的结果进行运算...

  • MySQL 字段控制查询

    一、 去除重复查询 去除重复记录(两行或两行以上记录中系列的上的数据都相同),例如employee表中sal字段就...

  • Kettle案例十八:去除重复

    流程图 Excel输入配置image.pngimage.png 排序记录配置image.png 去除重复记录配置i...

  • 删除Sql中的重复数据(转)

    在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1、查找表中多余的重复记录,重复记录是根据...

  • SQL重复记录查询的几种方法

    文章转载自:http://www.jb51.net/article/34820.html SQL重复记录查询的几种...

  • 4.SQL之数据查询(DQL)

    DQL--数据查询语言 谓词:select 查询数据 基本语法 基础查询 查询多个字段 去除重复记录 起别名 条件...

网友评论

    本文标题:sql技巧(二)去除重复记录

    本文链接:https://www.haomeiwen.com/subject/jggbsxtx.html