我想做的是通过将一个表中的评级列与另一表中的评级列进行比较来生成相似度百分比量。

但是,这需要限于一个表中的ID与另一表中的ID匹配,针对特定用户且两个表的评级列中都存在评级的实例。

例如,表1具有以下列和数据:

   id   |   rate (out of 10)
=====================
   1    |    8
   2    |    10
   3    |    5
   4    |    4
   5    |    0
   6    |    9
   7    |    8


并且table2具有以下列和数据:

 movid  |   userid   |   rating (out of 10)
================================
   1    |     3      |    6
   2    |     2      |    10
   3    |     1      |    4
   4    |     3      |    7
   5    |     3      |    6
   6    |     4      |    8
   7    |     3      |    5


因此,可以说我想使用“ userid” = 3的任何行,并将它们从table2的“ rating”与table1的“ rate”列进行比较,其中“ rate”> 0且两个表的id / movid具有相同的编号。

使用上面的示例,要比较的结果应限于:

   id   |   rate
=====================
   1    |    8
   4    |    4
   7    |    8

 movid  |   userid   |   rating
================================
   1    |     3      |    6
   4    |     3      |    7
   7    |     3      |    5


即使用户ID 3在表2中对Movid 5的评分为0,但在表1中对ID 5的评分为0(无评分),因此它不会进行比较。

这将比较每个id / movid的收视率,然后将其汇总为总计。由于评分数字基于10分,因此我猜想确定相似度百分比的最佳方法是将每个id / movid之间的差值减去10,得出百分比数。

对于id / movid 1,表1中的“比率”为8,而table2中的“ rating”为2。这些数字之间的差为2。我们从10中减去2,以获得id / movid 1的80%相似度。

每次比较都需要发生这种情况,然后将它们加在一起。

因此,根据我的计算,id / movid 1、4和7的总和的相似度得分为73%(四舍五入不带小数)。

这个总百分比是我试图达到的最终结果。谁能帮我吗?在拔出所有头发以使其正常工作之后,我现在秃顶。

最佳答案

SELECT ROUND(SUM(10-ABS(table1.rate-table2.rating))*10/count(table1.id)) as per FROM table1 INNER JOIN table2 ON table1.id=table2.movieid WHERE userid=3 and table1.rate <> 0 GROUP BY userid


这将为您提供所需的东西。

09-05 14:18