PostgreSQL中具有互换列值的行的聚合

时间:2016-02-22 06:22:33

标签: sql database postgresql

我的输入表看起来像这样

Source   Destn   Value
-----------------------
A        B        1
B        A        2

期望的输出 - > A B 3

在PostgreSQL中获取上述结果的相应查询是什么?

1 个答案:

答案 0 :(得分:1)

试试这个:

SELECT CASE WHEN Source < Destn THEN Source ELSE Destn END,
       CASE WHEN Source >= Destn THEN Source ELSE Destn END,
       SUM(Value)
FROM mytable
GROUP BY CASE WHEN Source < Destn THEN Source ELSE Destn END,
         CASE WHEN Source >= Destn THEN Source ELSE Destn END

Demo here

修改:信用转到@Nick Barnes

可以使用LEASTGREATEST简化查询:

SELECT least("Source","Destn"),
       greatest("Source","Destn"),
       SUM("Value")
FROM mytable
GROUP BY least("Source","Destn"),
         greatest("Source","Destn")

Demo here

相关问题