MySQL 兼容性或相似度排名查询

标签 mysql sum diff

你好,我正在尝试开发一种方法来查询值和失败值之间的兼容性或相似性。它不是最高或最低的 AVG 评级,而是数字或行上的值之间的最小差异。因此,如果结构类似于以下内容,其中 RANK 是用户的“评级”。

USER  ITEM   RANK
A      x      5
B      x      6
C      x      2
A      y      2
B      y      3
C      y      8
A      z      7
B      z      4
C      z      4

最后,我希望能够像这样对数据进行排序:

用户 A 与用户 B 的平均评分相差 3

用户 A 与用户 C 的平均评分相差 4

用户 B 与用户 C 的平均评分相差 5

到目前为止,我唯一的想法是为每个排列构建一个临时表(巨大):

col1  col2  dif   item
A      B      1      x
A      C      3      x

等等... 然后用 GROUP 求和。但这仍然不能正确处理用户 A 和 C 在某些项目上匹配更紧密并且在其他项目上具有更大差异以超过初始接近度的情况。任何人都可以给出任何方向吗?

谢谢!

这是一个 mysql 5.5 db,所以我在查询结构上遗漏了任何 CTE 或类似内容。

最佳答案

可以使用自连接

select a.user, b.user, abs(a.rank - b.rank) diff_rank, a.item
from my_table a
inner join my_table b on a.item  = b.item and a.user <> b.user
order by item, diff_rank asc

为了避免重复的值,你可以使用不同的

select distinct a.user, b.user, abs(a.rank - b.rank) diff_rank, a.item
from my_table a
inner join my_table b on a.item  = b.item and a.user <> b.user
order by item, diff_rank asc

为了获得差异最低的用户,您可以更改顺序

select distinct a.user, b.user, abs(a.rank - b.rank) diff_rank, a.item
from my_table a
inner join my_table b on a.item  = b.item and a.user <> b.user
order by diff_rank asc

关于MySQL 兼容性或相似度排名查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46613690/

相关文章:

javascript - php mysql 后台进程

mysql - 将数据从一个表移动到第二个表会提高更新速度吗?

MYSQL求和错误

mysql - 计算MySQL中组记录的总和

svn - 从两个日期之间的 svn 命令行获取更改的文件

mysql - 获取一个月中每一天的值(value)

mysql - Play 2.0 Complex join query如何解析(Anorm)

mysql - MySQL中每三行的总和

diff - 是否有保留线路所有权的差异算法

git - 在 VS2013 中查看两个 git 修订版之间的差异