Граф дублирует записи в таблице 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)
Ответы
Ответ 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)