好的,我有一个存储两个键的关系,一个产品 ID 和一个属性 ID。我想找出与给定产品最相似的产品。(属性实际上是数字,但它使示例更加混乱,因此已将它们更改为字母以简化视觉表示。)
Prod_att
Product | Attributes
1 | A
1 | B
1 | C
2 | A
2 | B
2 | D
3 | A
3 | E
4 | A
最初这似乎相当简单,只需选择产品具有的属性,然后计算每个产品共享的属性数量。然后将此结果与产品具有的属性数量进行比较,我可以看到两种产品的相似程度。这适用于相对于其比较产品具有大量属性的产品,但是当产品的属性非常少时会出现问题。例如,产品 3 几乎与其他所有产品都有一个平局(因为 A 很常见)。
SELECT Product, count(Attributes)
FROM Prod_att
WHERE Attributes IN
(SELECT Attributes
FROM prod_att
WHERE Product = 1)
GROUP BY Product
;
有关如何解决此问题或改进我当前查询的任何建议?
谢谢!
*编辑:产品 4 将为所有产品返回 count() =1。我想展示产品 3 更相似,因为它具有更少的不同属性。