SQL Oracle,select 不同的无序对
SQL Oracle, select distinct unordered couples
我的 table 有两列,用于标识两个不同的个体;但是,任何一对都可能出现不止一次,并且个人在列之间交换(例如,A 卖 100 给 B,B 卖 150 给 A):
id1 id2 value
A B 100
C B 110
B A 150
我需要获得一个 table ,其中每对夫妇只出现一次,即我需要找到不同的无序夫妇,并对所有相应行的值求和:
id1 id2 value
A B 250
C B 110
如何获得不同的无序对的 "index"?我应该如何处理这个任务?
编辑:额外问题。假设我也有每个 Id 的属性,例如国家:
id1 id2 country1 country2 value
A B IT FR 100
C B US FR 110
B A FR IT 150
我显然可以在第二步中使用联接将它们返回到结果 table 中。但是,有没有办法让它们保持在第一位?
您可以使用 least()
和 greatest()
:
select least(id1, id2) as id1, greatest(id1, id2) as id2, sum(value)
from t
group by least(id1, id2), greatest(id1, id2)
我的 table 有两列,用于标识两个不同的个体;但是,任何一对都可能出现不止一次,并且个人在列之间交换(例如,A 卖 100 给 B,B 卖 150 给 A):
id1 id2 value
A B 100
C B 110
B A 150
我需要获得一个 table ,其中每对夫妇只出现一次,即我需要找到不同的无序夫妇,并对所有相应行的值求和:
id1 id2 value
A B 250
C B 110
如何获得不同的无序对的 "index"?我应该如何处理这个任务?
编辑:额外问题。假设我也有每个 Id 的属性,例如国家:
id1 id2 country1 country2 value
A B IT FR 100
C B US FR 110
B A FR IT 150
我显然可以在第二步中使用联接将它们返回到结果 table 中。但是,有没有办法让它们保持在第一位?
您可以使用 least()
和 greatest()
:
select least(id1, id2) as id1, greatest(id1, id2) as id2, sum(value)
from t
group by least(id1, id2), greatest(id1, id2)