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

您需要一种过滤掉相同成员只是以不同顺序排列的“重复项”的方法。一种方法是使用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 回答