计算相似度

时间:2015-04-21 20:36:15

标签: sql database oracle function similarity

我有这个代码来计算两个食谱之间的相似性 - 一般公式=相似度(r1,r2) 例如,给出含有4种成分的配料(鸡肉,羊杂碎,奶油,威士忌)的配方。与5种成分(鸡肉,奶油,芥末,大蒜和洋葱)的另一种配方相比。所以相似度为(2 * 2/4 + 5)= 0.4。

SELECT DISTINCT 2*
(select count (*) from Ingredient i where i.idI in (
select distinct idI from RecpIngr where idR = r1.idR
INTERSECT 
select distinct idI from RecpIngr where idR = r2.idR))
/ ((select distinct count(idI) from RecpIngr where idR = r1.idR) +
(select distinct count (idI) from RecpIngr where idR = r2.idR) )
INTO similar_values
from Recipe r1, Recipe r2
WHERE r1.idR = 1 
and r2.idR = 2;

我需要编辑上面的代码,以便能够返回给定配方iD的值。

1 个答案:

答案 0 :(得分:0)

这是一种更简单的方法。我不知道它是否会像这样工作,但它应该让你更好地了解方向。如果有任何问题,请告诉我。

select count(i.idI), i.name
from Recipe r
   inner join RecpIngr ri on r.idR = ri.idR
   inner join Ingredients i on ri.idI = i.idI   
where (r.idR = 1 or r.idR = 2)
group by i.idI
having count(i.idI) > 1

刚看到更新。我没有包括这个等式,但我想你现在可能能够找到这个部分了。如果您需要进一步澄清,请与我们联系。