PostgreSQL查询根据其他两列的值的组合聚合列的值,而不考虑顺序

j7dteeu8  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(2)|浏览(135)

我想执行一个操作,根据另外两列中的值的组合来聚合一列中的值,而不管它们出现在哪一列中。例如,给定此表:

a b 10.0 <-
b c 5.0 
c d 1.0 
b a 20.0 <-

我想返回以下内容(如果我想做的聚合是一个总和):

a b 30.0 <-
b c 5.0 
c d 1.0
bxgwgixi

bxgwgixi1#

我们可以在bothcolumn selectionGROUP BY子句中使用LEASTGREATEST

SELECT
    LEAST(col1, col2) AS col1,
    GREATEST(col1, col2) AS col2,
    SUM(col3) AS sum_c
FROM yourtable
GROUP BY 
  LEAST(col1, col2), 
  GREATEST(col1, col2)
ORDER BY col1, col2;

根据您的数据在此sample fiddle上试用。
这里不需要CASE WHEN

mccptt67

mccptt672#

我建议查看分组和排序功能,这是一个如何使用group by和order by来实现您正在尝试做的事情的示例-

SELECT
    CASE WHEN a <= b THEN a ELSE b END AS col1,
    CASE WHEN a <= b THEN b ELSE a END AS col2,
    SUM(c) AS sum_c
FROM your_table
GROUP BY col1, col2
ORDER BY col1, col2;

GROUP BY子句按col1col2的唯一组合对行进行分组,ORDER BY子句按指定顺序对结果进行排序,CASE语句确保列A和B中的值排序一致,以便将“a b”和“b a”视为相同的组合,最后,SUM函数用于聚合列C中的值

相关问题