gpt4 book ai didi

php - MySQL-从两列中两个不同的行满足相同条件的地方获取相似度分数

转载 作者:行者123 更新时间:2023-11-29 18:07:57 28 4
gpt4 key购买 nike

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

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

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

   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 中的“评级”与 中的“评级”列进行比较table1,其中两个表中的 '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 在 table2 中对 movid 5 进行了评分,但在 table1 中对 id 5 的评分为 0(无评分) ,所以它不会比较这些。

这将比较每个 id/movid 的评分,然后将其放入总分中。由于评分数字基于 10 分制,我猜测确定相似性百分比的最佳方法是获取每个 id/movid 之间的差异,从 10 中减去它以获得百分比数字。

对于 id/movid 1,table1 中的“rate”为 8,table2 中的“评级”是 6。这些数字之间的差是 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

这将为您提供所需的内容。

关于php - MySQL-从两列中两个不同的行满足相同条件的地方获取相似度分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47671560/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com