好的,我有一个存储两个键的关系,即产品 ID 和属性 ID。我想找出哪个产品与给定的产品最相似。(实际上,属性是数字,但为了简化视觉表示,它们已经被更改为字母。)
Prod_att
最初看起来似乎很简单,只需选择产品具有的属性,然后计算每个产品共享的属性数量。然后将此结果与产品具有的属性数量进行比较,就可以看出两个产品有多相似。这对于具有相对较多属性的产品而言是有效的,但是当产品具有非常少的属性时会出现问题。例如,产品3几乎会与其他每个产品打成平局(因为A非常普遍)。
有关如何修复此问题或改进当前查询的建议吗? 谢谢!
*编辑:所有产品的Product 4将返回count() = 1。我想显示Product 3更相似,因为它具有较少的不同属性。
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
;
有关如何修复此问题或改进当前查询的建议吗? 谢谢!
*编辑:所有产品的Product 4将返回count() = 1。我想显示Product 3更相似,因为它具有较少的不同属性。
HAVING
子句来实现。 - Luiggi Mendoza