0

私の友愛関係を促進するために、私は人々がお互いをどれだけよく知っているかを評価できるシステムを設計しようとしています。そうすれば、それはお互いを最も知らない人々と一致します。評価の表は次のようになります。

from_bro | to_bro | 評価
--------------------------
A | B | 5
B | A | 5
B | C | 2
C | B | 3
A | C | 5
C | A | 5

各ペアの評価の平均を選択するクエリを設計したいと思います。これまでのところ私はこれを持っています:

SELECT *、(m1.rating + m2.rating)/2AS平均
FROMはASm1と一致します
LEFTJOINはASm2と一致します
ON m1.from_bro = m2.to_bro
AND m1.to_bro = m2.from_bro

これはほとんどの部分で機能しますが、冗長データが含まれています。

from_bro | to_bro | 評価| from_bro | to_bro | 評価| 平均
-------------------------------------------------- ---------------
A | B | 5 | B | A | 5 | 5.0000
B | A | 5 | A | B | 5 | 5.0000
B | C | 2 | C | B | 3 | 2.5000
C | B | 3 | B | C | 2 | 2.5000
A | C | 5 | C | A | 5 | 5.0000
C | A | 5 | A | 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 

したがって、兄弟のペアごとに 1 つのレコードしか取得できません。

それらが文字列の場合は、次を使用できます。

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

これは文字列比較であり、m1.from_bro > m2.from_bro を意味します

于 2011-02-27T18:09:11.520 に答える