Я пытаюсь подсчитать, сколько дубликатов в одном столбце с одним и тем же идентификатором FK. Для каждого Shared_FK_id должен быть только один тип.
table:
Shared_FK_ID : bigint
type: varchar(50)
Образец данных:
831 Ford
831 Fiat
831 Honda
831 Honda
831 Dodge
831 Volvo
831 Volvo
831 Opel
Под дубликатами я подразумеваю значения, которые совпадают в столбце type
.
Каков ожидаемый результат в вашем образце данных?
Выглядит немного очевидным, но SELECT count(1), type group by type
«Для каждого Shared_FK_id должен быть только один тип». Вы действительно имеете в виду «Должен быть только один экземпляр каждого типа на Shared_FK_id»?
Твое право. Да, я сделал
И вам нужно общее количество дублированных строк во всем идентификаторе FK или количество типов, содержащих дубликаты? или количество дубликатов внутри каждого типа? Думаю, вам подойдет один из этих запросов, в зависимости от желаемого результата: dbfiddle.uk/…
P.S. Если вы действительно имели в виду то, что я предложил, то, пожалуйста, отредактируйте свой вопрос соответствующим образом, чтобы он был понятен для всех.
Одно из ваших предложений по ссылке сработало. сделать предложение решения, и я приму ответ.
Я могу сделать ... если вы сначала скажете мне, какое решение вы хотели :-)
Два последних примера
Должен работать для большинства СУБД sql
select Shared_FK_ID, count(*) nmbr_of_dbls
from (
select Shared_FK_ID, type , count(*)
group by Shared_FK_ID, type
having count(*) > 1
) t
group by Shared_FK_ID
Чтобы уточнить Ответ Серга, а также сделать его специфичным для SQL-сервера, вы можете выполнить одно из следующих действий в зависимости от того, какой именно вывод вам нужен.
1) количество типов, содержащих дубликаты:
select Shared_FK_ID, count(*) nmbr_of_dbls
from (
select Shared_FK_ID, [type] , count(*) nmbr
from data
group by Shared_FK_ID, [type]
having count(*) > 1
) t
group by Shared_FK_ID
2) общее количество дублирующихся строк во всем ФК ID:
select Shared_FK_ID, sum(nmbr) nmbr_of_dbls
from (
select Shared_FK_ID, [type] , count(*) nmbr
from data
group by Shared_FK_ID, [type]
having count(*) > 1
) t
group by Shared_FK_ID
живая демонстрация: https://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=c8e1ed9607430fde16157367d59afc90
Пожалуйста, объясните, что ты подразумевает под дубликатом. Также отметьте базу данных, которую вы используете.