当ID的列可以反转时,SQL的值总和

时间:2017-10-03 16:32:15

标签: mysql sql

对于这个问题的标题并不完全确定,但我已经被这个问题困扰了几个小时,但没有成功搜索类似的问题或帖子。

基本上我在TableA中有3列,如下所示:

**| Col1 | Col2 | Col3 |**
  |  1   |   2  |  50  |
  |  1   |   3  |  64  |
  |  2   |   1  |  71  |
  |  2   |   5  |  16  |
  |  5   |   2  |  23  |

Col1 is a SourceID, Col2 is a TargetID and Col3 is the Value

Col1和Col2是从另一个表引用的ID。 Col1和Col2在同一记录中不能相同,因此Col1不能同时为1,而Col2为1。但是,正如您从记录1和3中看到的那样,它们引用了相同的两个ID,但是它们已经交换了列。

现在我的问题是:如何获得每个ID的总价值,如下表所示:

**| Col1 | Col2 | Col3 |**
  |  1   |   2  |  121 |
  |  1   |   3  |  64  |
  |  2   |   5  |  39  |

Col3 Value with将是具有匹配ID的所有值的总和(无论ID是否出现在Col1或Col2中),它们将由Col1 ASC订购。这基本上意味着删除了以下两个记录:

  |  2   |   1  |  71  |
  |  5   |   2  |  23  |

我很乐意在需要的地方添加额外的信息,但这很难描述 - 任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:5)

使用leastgreatest

select least(col1,col2),greatest(col1,col2),sum(col3)
from tbl 
group by least(col1,col2),greatest(col1,col2)

请注意,这可能会为您提供不在表中的行组合。你应该澄清是否必须避免这种情况。