Подтвердить что ты не робот

Граф дублирует записи в таблице Mysql?

У меня есть таблица с последующей структурой.

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

Запрос, возвращающий этот результат:

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

Имена, которые дублируются как AAA и BBB. Конечный результат, который я хочу, - это количество повторяющихся записей.

Результат должен выглядеть следующим образом:    Всего дублированных продуктов (2)

4b9b3361

Ответ 1

Подход состоит в том, чтобы иметь вложенный запрос, который имеет одну строку для каждого дубликата, а внешний запрос возвращает только количество результатов внутреннего запроса.

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

Ответ 2

почему бы просто не обернуть это в подзапрос:

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

См. SQL Fiddle with Demo

Ответ 3

Используйте инструкцию IF, чтобы получить желаемый результат:

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

Вывод:

AAA 2 duplicated
BBB 3 duplicated
CCC 1 not duplicated

Ответ 4

Принятый ответ подсчитывает количество строк с дубликатами, а не количество дубликатов. Если вы хотите посчитать фактическое количество дубликатов, используйте это:

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

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

) x

То, что это делает, это общее количество дубликатов в группе, но затем вычитает количество записей с дубликатами. Причина в том, что группа по сумме не все дубликаты, одна запись каждой из этих групп - это уникальная строка.

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

Ответ 5

Для списка:

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

Вид таблицы

Для общего количества:

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

//Всего: 5

Ответ 6

Код SQL:

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)