2012-12-06 19 views
1

我移到該問題日益迫切的組合: 我有僅有3列,每列到任何一個部件或旅程的ID的參照的表。SELECT兩列而不是序列

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計數(他們經常同居一室)

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

正如你看到的,該成員列的順序並不重要。

是如何解決這個問題的最好方法是什麼?我不得不承認,我甚至不知道要放什麼東西在select語句:(

回答

2

您需要過濾掉「重複」,其中相同的構件,只是以不同的順序的一種方式。其中一個辦法這是greatest and least

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 
+0

哦,那聲音退出適合非常感謝你,我想我必須在最大和最小功能讀了起來:!/ – Otze