计算Mysql表中的重复记录?

did*_*ido 25 mysql duplicates

我有桌子,下面的结构.

TBL

id   name  
1    AAA
2    BBB
3    BBB
4    BBB
5    AAA
6    CCC

select count(name) c from tbl
group by name having c >1
Run Code Online (Sandbox Code Playgroud)

返回此结果的查询:

AAA(2)  duplicate
BBB(3)  duplicate
CCC(1)  not duplicate
Run Code Online (Sandbox Code Playgroud)

重复的名称为AAA和BBB.最终结果,我想要的是这些重复记录的数量.

结果应如下所示:重复产品总数(2)

xda*_*azz 40

方法是使嵌套查询每个副本有一行,外部查询只返回内部查询结果的计数.

SELECT count(*) AS duplicate_count
FROM (
 SELECT name FROM tbl
 GROUP BY name HAVING COUNT(name) > 1
) AS t
Run Code Online (Sandbox Code Playgroud)


aru*_*aku 11

使用IF语句获得所需的输出:

SELECT name, COUNT(*) AS times, IF (COUNT(*)>1,"duplicated", "not duplicated") AS duplicated FROM <MY_TABLE> GROUP BY name
Run Code Online (Sandbox Code Playgroud)

输出:

AAA 2 duplicated
BBB 3 duplicated
CCC 1 not duplicated
Run Code Online (Sandbox Code Playgroud)


Tar*_*ryn 10

为什么不将它包装在子查询中:

SELECT Count(*) TotalDups
FROM
(
    select Name, Count(*)
    from yourTable
    group by name
    having Count(*) > 1
) x
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo


Lim*_*isa 9

对于列表:

SELECT COUNT(`name`) AS adet, name
FROM  `tbl` WHERE `status`=1 GROUP BY `name`
ORDER BY `adet`  DESC
Run Code Online (Sandbox Code Playgroud)

表视图

总计数:

    SELECT COUNT(*) AS Total
    FROM (SELECT COUNT(name) AS cou FROM tbl GROUP BY name HAVING cou>1 ) AS virtual_tbl 
Run Code Online (Sandbox Code Playgroud)

//总计:5


Ant*_*ond 5

接受的答案计算具有重复项的行数,而不是重复项数量.如果要计算重复实际数量,请使用:

SELECT COALESCE(SUM(rows) - count(1), 0) as dupes FROM(

    SELECT COUNT(1) as rows
    FROM `yourtable`
    GROUP BY `name`
    HAVING rows > 1

) x
Run Code Online (Sandbox Code Playgroud)

这样做可以完成组中的重复项,但是然后减去具有重复项的记录数量.原因是group by total不是全部重复,每个分组的一个记录是唯一的行.

小提琴:http://sqlfiddle.com/#!2/29639a/3