1

私はこの問題に必死になっています。3つの列だけのテーブルがあり、それぞれがメンバーまたは旅のIDへの参照です。

create table sharesRoom (
 member1 int references Members,
 member2 int references Members,
 journey int references Journeys,
 primary key (member1,member2,journey));

誰が誰と、どのくらいの頻度で部屋を共有したかという情報で通知を出すPLPGSQL関数を書きたい。その通知では、メンバーがテーブルにどのように連続して格納されているかは重要ではありません。だからこのテーブル

1 2 1
2 1 2
3 4 1
4 3 1
5 6 1
8 7 1

通知でこれを上げる必要があります:member1 member2 count(彼らが部屋を共有した頻度)

1 2 2
3 4 1 (same journey, so this is just 1)
5 6 1
8 7 1

ご覧のとおり、メンバー列の順序は重要ではありません。

これを解決する最善の方法は何ですか?私は認めなければなりません、私はselectステートメントに何を入れるべきかさえ知りません:(

4

1 に答える 1

2

同じメンバーの順序が異なる「重複」を除外する方法が必要です。これを行う1つの方法は、greatestandleastを使用することです。

select high_member, low_member, count(*)
from( select distinct greatest(member1, member2) as high_member, 
                      least(member1, member2) as low_member, 
                      journey 
      from sharesRoom )
group by high_member, low_member
于 2012-12-06T10:53:34.727 に答える