#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;