【发布时间】:2017-07-21 18:26:02
【问题描述】:
我有下表,我的目标是搜索与另一个给定客户在评价某些制造商方面最相似的客户。这个例子可以在SQL fiddle找到。
customer manufacturer rating
A Manuf_A 8
A Manuf_B 3
B Manuf_A 4
B Manuf_Y 3
C Manuf_X 3
C Manuf_Y 7
D Manuf_A 8
D Manuf_B 7
示例:
我们想找出哪些客户最匹配客户 'A',他们对两个制造商 manuf_A 和 manuf_B 有评级。 p>
期望的结果:
customer difference
D 4
B 7
C 11
预期算法:
- 差值越小,说明两个客户关系越密切
- 如果客户不与目标客户共享任何制造商评级,则他们不存在的评级应该为零。
B 区别:
abs(A.manuf_A.rating (8) - B.manuf_A.rating(4)) = 4
abs(A.manuf_B.rating (3) - B.manuf_B.rating(Doesn't exist/0)) = 3
= 4 + 3
= 7
C 区别:
abs(A.manuf_A.rating (8) - C.manuf_A.rating(Doesn't exist/0)) = 8
abs(A.manuf_B.rating (3) - C.manuf_B.rating(Doesn't exist/0)) = 3
= 8 + 3
= 11
D 差:
abs(A.manuf_A.rating (8) - D.manuf_A.rating(8)) = 0
abs(A.manuf_B.rating (3) - D.manuf_A.rating(7)) = 4
= 0 + 4
= 4
任何关于如何在 MySQL 中完成此操作的建议以及任何替代方法的建议都会受到欢迎。
【问题讨论】:
-
只是评论:这是一个写得很好的问题。您提供了一个 SQL Fiddle 示例(有效)。你已经清楚地解释了这个问题。作为奖励,这是一个有趣的问题。
-
Euclidean distance 可能是更好的方法。
-
@PaulSpiegel 。 . .如果它能让你感觉更好,这就是所谓的曼哈顿距离,对于这样的问题是完全合理的。