sql - 在创建 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]
解释:B
name 和 name1 都有,所以我们需要同时添加 count1 和 count2B
解决方案
您需要对数据进行反透视,然后进行聚合。这是一个简单的方法:
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;
推荐阅读
- sql - How do I use array_agg with a condition?
- android - Save encrypted data into file
- java - 使用 java 创建会话而不使用 servlet
- google-apps-script - Increment only non-empty cells in a range with a single button on Google Sheets
- ios - what is the best way to save json data in swift model
- php - 如何仅编辑 Opencart 上选定字段的用户权限?
- angular-material - How to customize `mat-form-field`
- visual-studio - Web API works locally but doesn’t work on azure
- mysql - 检查表 A 中的所有行在表 B 中是否具有特定值,包括 GROUP BY
- laravel - Laravel project wont serve to given ip via Homestead