SELECT组合两列而不是序列

时间:2012-12-06 10:49:08

标签: sql postgresql aggregate-functions

我对这个问题越来越绝望: 我有一个只有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语句中放什么:(

1 个答案:

答案 0 :(得分: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