SQL для поиска совпадений строк и вычисления процента

У меня есть базовая база данных Oracle с двумя таблицами. Мне нужно создать запрос, который попытается однозначно сопоставить записи, используя простую проверку first_name/last_name/address. Что мне также нужно от этого, так это то, какой процент записей из таблицы A находится в таблице B.

Итак, на данный момент у меня есть что-то очень простое:

SELECT First_Name, Family_Name FROM table_b
MINUS
SELECT First_Name, Family_Name FROM table_a;

Может ли кто-нибудь посоветовать лучший способ разработать/изменить это для достижения желаемого результата? Спасибо!


person GrumP    schedule 12.12.2013    source источник
comment
Не могли бы вы привести пример и желаемый результат? Я не уверен, каким должен быть результат вашего сопоставления записей.   -  person Joachim Isaksson    schedule 12.12.2013
comment
Процент записей в одной таблице, которые также находятся в другой таблице.   -  person GrumP    schedule 12.12.2013


Ответы (1)


Вы можете просто использовать JOIN и усреднить количество совпадений, чтобы получить процент;

SELECT 100*AVG(CASE WHEN table_b.First_Name IS NULL THEN 0 ELSE 1 END) percent
FROM table_a 
LEFT JOIN table_b
  ON table_a.First_Name  = table_b.First_Name
 AND table_a.Family_Name = table_b.Family_Name

SQLfiddle для тестирования.

Обратите внимание, что если есть дубликаты, счет может быть отключен.

person Joachim Isaksson    schedule 12.12.2013
comment
Большое спасибо! если есть дубликаты, счет может быть выключен, есть ли обходной путь? Например, способ перечислить дубликаты и записи, которые не могут быть разрешены? (имя совпадает, но адреса разные) - person GrumP; 12.12.2013