首页 > 解决方案 > SQL Oracle,选择不同的无序对

问题描述

我的表有两列,它们标识了两个相互关联的不同个体;但是,任何一对可能出现不止一次,个人在列之间切换(例如 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

在第二步中,我显然可以使用连接将它们返回到结果表中。但是,有没有办法让它们保持在首位?

标签: sqloracledistinct

解决方案


您可以使用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)

推荐阅读