mysql去重

mysql中数据去重和优化

老子叫甜甜 提交于 2020-01-03 08:34:19
更改表user_info的主键uid为自增的id后,忘了设置原来主键uid属性为unique,结果导致产生uid重复的记录。为此需要清理后来插入的重复记录。 基本方法可以参考后面的附上的资料,但是由于mysql不支持同时对一个表进行操作,即子查询和要进行的操作不能是同一个表,因此需要通过零时表中转一下。 写在前面:数据量大时,一定要多涉及的关键字段创建索引!!!否则很慢很慢很慢,慢到想死的心都有了 1 单字段重复 生成零时表,其中uid是需要去重的字段 create table tmp_uid as (select uid from user_info group by uid having count(uid)) create table tmp_id as (select min(id) from user_info group by uid having count(uid)) 数据量大时一定要为uid创建索引 create index index_uid on tmp_uid create index index_id on tmp_id 删除多余的重复记录,保留重复项中id最小的 delete from user_info where id not in (select id from tmp_id) and uid in (select uid from tmp_uid

MySQL去重统计

五迷三道 提交于 2019-12-23 18:17:50
场景是这样的,要对某一个表里面的数据进行统计,但是可能会有重复数据,下面就是针对person 表,查询表中男女的去重统计,假如有的名字重复了。重名的不查出来 SELECT count( CASE WHEN p.sex= "01" THEN 1 ELSE NULL END ) AS '男', count( CASE WHEN p.sex= "02" THEN 1 ELSE NULL END ) AS '女' FROM ( SELECT DISTINCT t.name, t.sex FROM person t ) p; 先用 DISTINCT查询出name和sex当做临时表,DISTINCT会把整个要查询的东西作为去重的条件,也就是你查什么,就把什么当做去重条件,这里把name加上,就是把名字和性别当做去重条件了,这样名字和性别相同的就去重了。这时候把查询结果当做临时表,再根据性别做统计就行了。试过了很多方式,本来用case when then count很复杂而且不灵活,就改成了这种方式,简洁明了 来源: CSDN 作者: 不喂鱼 链接: https://blog.csdn.net/chen1992xin/article/details/103663129

mysql 去重留一

試著忘記壹切 提交于 2019-12-09 15:50:19
首先先分析一下 我们现在的目的 是 查询到这俩张表的所有数据 然后进行删除重复记录 每条数据只保留一条 第一步: 查询以下俩张表的重复记录 (关键字段重复>1) ks_examcity 、 ks_examdistrict select * from ks_examcity group by examSubjectID,city,province having count(examSubjectID)>1; select * from ks_examdistrict group by examSubjectID,district,city having count(examSubjectID)>1; 第二步: 查询这两张表中 每条记录的第一条记录 (每条记录重复中的第一条 id最小) select min(id) from ks_examcity group by examSubjectID, city, province having count(examSubjectID)> 1 SELECT min(id) FROM `ks_examdistrict` GROUP BY `examSubjectID`, `district`, `city` HAVING COUNT(`examSubjectID`)> 1 第三步: 联查: 查询所有的重复数据以及重复记录中第一条以外的数据

mysql中去重 distinct 用法

亡梦爱人 提交于 2019-12-06 14:33:53
#########sample 1 mysql中去重 distinct 用法 在使用 MySQL 时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段,例如有如下表user: 用distinct来返回不重复的用户名:select distinct name from user;,结果为: 这样只把不重复的用户名查询出来了,但是用户的id,并没有被查询出来:select distinct name,id from user;,这样的结果为: distinct name,id 这样的mysql 会认为要过滤掉name和id两个字段都重复的记录,如果sql这样写:select id,distinct name from user,这样mysql会报错,因为distinct必须放在要查询字段的开头。 所以一般distinct用来查询不重复记录的条数。 如果要查询不重复的记录,有时候可以用group by : select id,name from user group by name; https://www.cnblogs.com/shiluoliming/p

mysql去重查询表中数据

拥有回忆 提交于 2019-12-04 21:27:25
1、distinct select count(distinct CName) from teble select count(CName) from (select distinct CName from Course) as temp SELECT DISTINCT text_zhcn FROM dms_menuconfig -- 去重查询表中数据 select DISTINCT(user_id) from user_info where children_merchant_id='kuaiditong'; 2、group by select count(1) from Course group by CName 文档:mysql去重查询表中数据.note 链接: http://note.youdao.com/noteshare?id=581440d92396bab4de6568d1a69baa58&sub=9B8DAB091CC5490BA5F8FA29557CCD67 来源: https://www.cnblogs.com/LinHuChongChongChong/p/11884830.html

mysql查询去重

匿名 (未验证) 提交于 2019-12-02 22:06:11
SELECT count(DISTINCT type) as count ,dms_warehouse_id as whId from bms_warehouse_supplies where dms_warehouse_id in (1,2,3) GROUP BY dms_warehouse_id mysql版本需要4.0以上 来源:博客园 作者: DD1024 链接:https://www.cnblogs.com/ODOD/p/11532633.html

MySQL数据库去重

匿名 (未验证) 提交于 2019-12-02 22:06:11
MySQL数据库去重 MySQL数据库去重 DELETE FROM table WHERE 去重字段名 IN ( SELECT x FROM ( SELECT 去重字段名 AS x FROM table GROUP BY 去重字段名 HAVING COUNT( 去重字段名 ) > 1 ) tmp0 ) AND 递增主键名 NOT IN ( SELECT y FROM ( SELECT min( 递增主键名 ) AS y FROM table GROUP BY 去重字段名 HAVING COUNT( 去重字段名 ) > 1 ) tmp1 ) 来源:51CTO 作者: DokcelyNg 链接:https://blog.csdn.net/Lmingtian_huigenghao/article/details/100584227

mysql count distinct 统计结果去重

时间秒杀一切 提交于 2019-12-02 16:09:21
1、使用distinct去重(适合查询整张表的总数)有多个学校+教师投稿,需要统计出作者的总数select count(author) as total from files每个作者都投稿很多,这里有重复的记录。 select distinct author from files;有可能两个学校的教师姓名相同,结果只统计一个,出错。select distinct author,sid from files统计(作者+学校id)的组合唯一值,结果出现正确的结果,但如何知道一共有多少人呢?select count(distinct author,sid) as total from files 2、group by 分组去重(适合根据条件分组后查询每组的总数) select author, count(distinct id) from files group by sid 3、记录两张表的数目的和,这两个表分开查询 SELECT SUM(c) FROM (SELECT COUNT(DISTINCT from_user_id, message_id) c FROM im_message WHERE dr = 0 AND message_status = 2 AND user_type = 1 AND to_user_id = 2 UNION ALL SELECT COUNT