Postgresql 基于一列聚合一个表,然后将其与另一个表联接
我正在使用以下两个表: 表1Postgresql 基于一列聚合一个表,然后将其与另一个表联接,postgresql,Postgresql,我正在使用以下两个表: 表1 Key |Clicks |Impressions -------------+-------+----------- USA-SIM-CARDS|55667 |544343 DE-SIM-CARDS |4563 |234829 AU-SIM-CARDS |3213 |232242 UK-SIM-CARDS |3213 |1333223 CA-SIM-CARDS |4321 |8883111
Key |Clicks |Impressions
-------------+-------+-----------
USA-SIM-CARDS|55667 |544343
DE-SIM-CARDS |4563 |234829
AU-SIM-CARDS |3213 |232242
UK-SIM-CARDS |3213 |1333223
CA-SIM-CARDS |4321 |8883111
MX-SIM-CARDS |3193 |3291023
表2
Key |Conversions |Final Conversions|Active Sims
-----------------+------------+-----------------+-----------
USA-SIM-CARDS |456 |43 |4
USA-SIM-CARDS |65 |2 |1
UK-SIM-CARDS |123 |4 |3
UK-SIM-CARDS |145 |34 |5
目标是获得以下输出:
Key |Clicks |Impressions|Conversions|Final Conversions|Active Sims
-------------+-------+-----------+-----------+-----------------+-----------
USA-SIM-CARDS|55667 |544343 |521 |45 |5
DE-SIM-CARDS |4563 |234829 | | |
AU-SIM-CARDS |3213 |232242 | | |
UK-SIM-CARDS |3213 |1333223 |268 |38 |8
CA-SIM-CARDS |4321 |8883111 | | |
MX-SIM-CARDS |3193 |3291023 | | |
此函数最关键的部分是根据转换聚合第二个表
然后我会想象用一个内部连接来执行它
谢谢。然后分两步进行: 1) 汇总第二个表:
SELECT Key, sum(Conversions) as Conversions, sum("Final Conversions") as FinalConversions, Sum("Active Sims") as ActiveSims FROM Table2 GROUP BY key
2) 将其用作连接到第一个表的子查询/派生表:
SELECT
t1.key,
t1.clicks,
t1.impressions,
t2.conversions,
t2.finalConversions,
t2.ActiveSims
From Table1 t1
LEFT OUTER JOIN (SELECT Key, sum(Conversions) as Conversions, sum("Final Conversions") as FinalConversions, Sum("Active Sims") as ActiveSims FROM Table2 GROUP BY 2) t2
ON t1.key = t2.key;
作为替代方案,您也可以加入,然后分组,因为不需要聚合两次或任何事情:
SELECT
t1.key,
t1.clicks,
t1.impressions,
sum(Conversions) as Conversions,
sum("Final Conversions") as FinalConversions,
Sum("Active Sims") as ActiveSims
From Table1 t1
LEFT OUTER JOIN table2 t2
ON t1.key = t2.key
GROUP BY t1.key, t1.clicks, t1.impressions
这里唯一重要的另一点是,我们使用的是左外联接,因为我们需要表1中的所有记录以及表2中与键匹配的所有记录