mysql mysql查询重复记录 hive查询重复数据 - 在MySQL中查找重复值




11 Answers

GROUP BY子句做一个SELECT 。 假设名称是您想要查找重复项的列:

SELECT name, COUNT(*) c FROM table GROUP BY name HAVING c > 1;

这将返回第一列中名称值的结果以及该值在第二列中出现次数的计数。

mysql过滤重复记录 sql查询重复数据

我有一个带有varchar列的表,并且我想查找在此列中具有重复值的所有记录。 我可以用来查找重复项的最佳查询是什么?




SELECT  *
FROM    mytable mto
WHERE   EXISTS
        (
        SELECT  1
        FROM    mytable mti
        WHERE   mti.varchar_column = mto.varchar_column
        LIMIT 1, 1
        )

该查询返回完整的记录,而不仅仅是独特的varchar_column

此查询不使用COUNT(*) 。 如果有很多重复项, COUNT(*)很贵,并且您不需要整个COUNT(*) ,只需要知道是否有两行具有相同的值。

具有varchar_column上的索引当然会大大加快此查询速度。




假设你的表名为TableABC,你想要的列是Col,T1的主键是Key。

SELECT a.Key, b.Key, a.Col 
FROM TableABC a, TableABC b
WHERE a.Col = b.Col 
AND a.Key <> b.Key

这种方法优于上述答案的是它给出了密钥。




要查找员工名称栏中有多少记录重复,下面的查询很有帮助;

Select name from employee group by name having count(*)>1;



SELECT t.*,(select count(*) from city as tt
  where tt.name=t.name) as count
  FROM `city` as t
  where (
     select count(*) from city as tt
     where tt.name=t.name
  ) > 1 order by count desc

用你的表替换城市 。 用您的字段名称替换名称




我的最后一个查询包含了几个帮助解答的答案 - 将group by,count和GROUP_CONCAT结合起来。

SELECT GROUP_CONCAT(id), `magento_simple`, COUNT(*) c 
FROM product_variant 
GROUP BY `magento_simple` HAVING c > 1;

这提供了两个示例(逗号分隔),我需要的条形码和多少重复的id。

相应地更改表格和列。




SELECT DISTINCT a.email FROM `users` a LEFT JOIN `users` b ON a.email = b.email WHERE a.id != b.id;



要删除具有多个字段的重复行,请首先将其替换为为唯一不同行指定的新唯一键,然后使用“group by”命令使用相同的新唯一键删除重复行:

Create TEMPORARY table tmp select concat(f1,f2) as cfs,t1.* from mytable as t1;
Create index x_tmp_cfs on tmp(cfs);
Create table unduptable select f1,f2,... from tmp group by cfs;



Select column_name, column_name1,column_name2, count(1) as temp from table_name group by column_name having temp > 1



SELECT ColumnA, COUNT( * )
FROM Table
GROUP BY ColumnA
HAVING COUNT( * ) > 1



SELECT DISTINCT name, count(name) as times FROM yourtable GROUP BY name



Related


Tags

mysql