0

为了促进兄弟会的联系,我正在尝试设计一个系统,让人们可以评估他们彼此了解的程度,然后它将匹配那些彼此了解最少的人。这是评级表的样子:

来自_bro | to_bro | 评分
--------------------------
一个 | 乙| 5
乙| 一个 | 5
乙| C | 2
C | 乙| 3
一个 | C | 5
C | 一个 | 5

我想设计一个查询来选择每对的平均评分。到目前为止,我有这个:

SELECT *, (m1.rating + m2.rating)/2 AS 平均
FROM 匹配 AS m1
LEFT JOIN 匹配 AS m2
开 m1.from_bro = m2.to_bro
和 m1.to_bro = m2.from_bro

这在大多数情况下都有效,但它包含冗余数据:

来自_bro | to_bro | 评级 | 来自_bro | to_bro | 评级 | 平均的
-------------------------------------------------- ---------------
一个 | 乙| 5 | 乙| 一个 | 5 | 5.0000
乙| 一个 | 5 | 一个 | 乙| 5 | 5.0000
乙| C | 2 | C | 乙| 3 | 2.5000
C | 乙| 3 | 乙| C | 2 | 2.5000
一个 | C | 5 | C | 一个 | 5 | 5.0000
C | 一个 | 5 | 一个 | C | 5 | 5.0000

看看第 1 行和第 2 行、第 3 行和第 4 行、第 5 行和第 6 行虽然不是重复的,但本质上是相同的。有没有办法可以过滤掉那些多余的行?

4

1 回答 1

4

如果 to_bro 和 from_bro 实际上是 bro_id (数字),则可以添加:

AND m1.from_bro_id > m2.from_bro_id 

所以你只能为每对兄弟获得一个记录。

如果它们是字符串,您可以使用:

AND STRCMP(m1.from_bro, m2.from_bro) = 1 

这是一个字符串比较,意思是 m1.from_bro > m2.from_bro

于 2011-02-27T18:09:11.520 回答