Поиск количества дубликатов в SQL

#sql #duplicates #ansi-sql

#sql #дубликаты #ansi-sql

Вопрос:

Я знаю, как вернуть дубликаты, выполнив следующее:

 select cust_name, cust_id, count(*)
from customers
group by cust_name, cust_id
having count(*) > 1;
  

Что я хочу знать, есть ли способ вернуть прямое количество дубликатов в таблице, а не связанные значения?

Например, если приведенный выше запрос вернул:

 cust_name   cust_id count(*)
Fred        22789      2
Jim         45678      3
  

Есть ли запрос, который я мог бы написать, который просто возвращал бы число?

Итак

 count(*)
   2
  

Или

 count(*)
   5
  

Что-то вроде этого. На самом деле уникальность может быть комбинацией от 1 до N столбцов, в приведенном выше примере показано только 2 столбца.

Ответ №1:

Вы бы использовали подзапрос:

 select count(*) as num_with_duplicates,
       sum(cnt) as total_duplicate_count
from (select cust_name, cust_id, count(*) as cnt
      from customers
      group by cust_name, cust_id
      having count(*) > 1
     ) cc;