我的表有两列,它们标识了两个不同的个体;但是,任何一对夫妇都可能出现不止一次,个体在列之间切换(例如,A 卖 100 给 B,B 卖 150 给 A(:
id1 id2 value
A B 100
C B 110
B A 150
我需要获得一个表,其中每对只出现一次,即我需要找到不同的无序对,并从所有相应的行中求和值:
id1 id2 value
A B 250
C B 110
如何获取不同无序对的"索引"?我应该如何处理这项任务?
编辑:额外的问题。假设我每个 ID 都有一个属性,例如国家/地区:
id1 id2 country1 country2 value
A B IT FR 100
C B US FR 110
B A FR IT 150
显然,我可以在第二步中使用联接将它们重新放入结果表中。但是,有没有办法首先保留它们?
您可以使用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)