使用其他表测量表



我在一个DB中有两个表。这些表有一个ID列。一个表总是准确的(表总是(,另一个表有时是准确的(有时是表(。表有时可能有多个ID映射到表Always上的单个ID。理想情况下,我希望在两个表之间有一个1-1的映射,但事实并非如此。我如何才能想出一种方法来测量表有时命中率/准确性基于一个成功的映射(1-1(到表总是

您可以使用SQL查询生成准确度报告:

select a.id, coalesce(s.cnt, 0) no_matches
from always a
left join (select id, count(*) cnt from sometimes group by id) s 
on s.id = a.id

对于表always中的每一行,这将检查sometimes中有多少行匹配。除1之外的任何值都表示映射问题(要么根本没有匹配,要么多个匹配(。

您可以生成摘要报告。假设您想要a中在b:中具有正确1-1匹配的行的百分比

select avg(case when s.cnt = 1 then 1.0 else 0 end) accuracy_ratio
from always a
left join (select id, count(*) cnt from sometimes group by id) s 
on s.id = a.id

也许你想生成三个比率:

select 
avg(case when s.cnt = 1 then 1.0 else 0 end)     accuracy_ratio,
avg(case when s.cnt is null then 1.0 else 0 end) unmatched_ratio,
avg(case when s.cnt > 1 then 1.0 else 0 end)     many_matches_ratio,
from always a
left join (select id, count(*) cnt from sometimes group by id) s 
on s.id = a.id

最新更新