首页 > 解决方案 > 在创建 PostgreSQL 查询时需要帮助

问题描述

我有一张下表。

Name count1 Name2 count2
A    1      B     2
B    2      c     4 
A    5      C     7

Name有 count1 个值,Name2有 count2 个值。

我需要以下结果

a -> 6   col[0][0] + c[2][0]
b-> 4    col[0][3] + c[1][1]
c -> 11  col[1][3] + col[2][3]

解释:Bname 和 name1 都有,所以我们需要同时添加 count1 和 count2B

标签: sqlpostgresql

解决方案


您需要对数据进行反透视,然后进行聚合。这是一个简单的方法:

select name, sum(cnt)
from ((select name1 as name, count1 as cnt from t) union all
      (select name2, count2 from t)
     ) t
group by name;

Postgres 的更新版本支持横向连接。当您拥有大量数据时,这些可能会更有效,但union all也可以正常工作。

编辑:

横向连接非常相似:

select v.name, sum(v.cnt)
from t, lateral join
     (values (t.name1, t.count1), (t.name2, t.count2)) v(name, cnt)
group by v.name;

推荐阅读