基于一列聚合表,然后将其与另一个表连接

时间:2017-08-30 13:26:45

标签: 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    
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 个答案:

答案 0 :(得分:1)

然后分两步:

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

这里唯一重要的是我们使用LEFT OUTER JOIN,因为我们希望Table1中的所有记录和Table2中与键匹配的任何记录。

相关问题