【发布时间】:2013-05-09 02:55:43
【问题描述】:
好的,我有一个存储两个键的关系,一个产品 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
;
对如何解决此问题或改进我当前的查询有何建议?
谢谢!
*edit: 产品 4 将为所有产品返回 count() =1。我想展示产品 3 更相似,因为它具有更少的不同属性。
【问题讨论】:
-
如何定义一个最小的相似属性集?这可以使用
HAVING子句来实现。 -
您使用的是什么RDBMS?
RDBMS代表关系数据库管理系统。RDBMS is the basis for SQL,对于所有现代数据库系统,如 MS SQL Server、IBM DB2、Oracle、MySQL 等...您能否也提供具有所需结果的示例记录? -
你用的是什么数据库?
-
在这种情况下应该如何处理产品 3?听起来您需要某种额外的因素来降低属性很少的产品的相似性......但如果不知道您想要什么结果,这很难建议。