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

MySQL compatibility or similarity ranking queries

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

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

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

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