web-dev-qa-db-fra.com

Compter les enregistrements en double dans la table Mysql?

J'ai une table avec la structure suivante. 

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

La requête renvoyant ce résultat:

AAA(2)  duplicate
BBB(3)  duplicate
CCC(1)  not duplicate

Les noms qui sont en double comme AAA et BBB. Le résultat final, qui je veux est le compte de ces enregistrements en double.

Le résultat devrait être comme ceci: Total produits en double ( 2 )

21
dido

L'approche consiste à avoir une requête imbriquée comportant une ligne par doublon et une requête externe renvoyant uniquement le nombre de résultats de la requête interne.

SELECT count(*) AS duplicate_count
FROM (
 SELECT name FROM tbl
 GROUP BY name HAVING COUNT(name) > 1
) AS t
34
xdazz

pourquoi ne pas simplement envelopper ceci dans une sous-requête:

SELECT Count(*) TotalDups
FROM
(
    select Name, Count(*)
    from yourTable
    group by name
    having Count(*) > 1
) x

Voir SQL Fiddle avec Demo

10
Taryn

Utilisez l'instruction IF pour obtenir le résultat souhaité:

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

Sortie:

AAA 2 duplicated
BBB 3 duplicated
CCC 1 not duplicated
10
arutaku

Pour liste:

SELECT COUNT(`name`) AS adet, name
FROM  `tbl` WHERE `status`=1 GROUP BY `name`
ORDER BY `adet`  DESC

 Table View

Pour le nombre total:

    SELECT COUNT(*) AS Total
    FROM (SELECT COUNT(name) AS cou FROM tbl GROUP BY name HAVING cou>1 ) AS virtual_tbl 

// Total: 5

7
Limitless isa

La réponse acceptée compte le nombre de lignes qui ont des doublons, pas le nombre de doublons. Si vous voulez compter le nombre réel de doublons, utilisez ceci:

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

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

) x

Cela permet de totaliser les doublons dans le groupe, mais soustrait ensuite la quantité d'enregistrements ayant des doublons. La raison en est que le groupe par le total n'est pas tous les doublons, un enregistrement de chacun de ces groupes est la ligne unique.

Fiddle: http://sqlfiddle.com/#!2/29639a/3

5
Anthony Vipond

Le code SQL est:

SELECT VERSION_ID, PROJECT_ID, VERSION_NO, COUNT(VERSION_NO) AS dup_cnt
FROM MOVEMENTS
GROUP BY VERSION_NO
HAVING (dup_cnt > 1 && PROJECT_ID = 11660)
0
Rankit Ranjan