sql - 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
在第二步中,我显然可以使用连接将它们返回到结果表中。但是,有没有办法让它们保持在首位?
解决方案
您可以使用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)
推荐阅读
- flutter - Flutter 响应式文本字段匹配屏幕尺寸
- ios - iOS:使 WebView 全屏(隐藏主页按钮后面的白色背景)
- c# - 自定义选择器 Xamarin Android
- cucumber - 使用 CLI 并行运行功能文件但在同一线程中运行场景?
- html - SVG 文件未在 Chrome 浏览器中显示
- javascript - 我正在尝试每 2 秒向字符串添加一个字符,但它不起作用,控制台中没有错误。Vue
- php - Laravel Eloquent 查询构建器与包装的“where”没有关系
- python-3.x - 在 Python/Django 中实现后台“计时器”功能的最佳方式
- python - 如何检索数据框中某些时间段的开始日期和结束日期?
- python - 为什么我只能使用负坐标在 Tkinter 画布上看到图像?