Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 基于一列聚合一个表,然后将其与另一个表联接_Postgresql - Fatal编程技术网

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

Postgresql 基于一列聚合一个表,然后将其与另一个表联接,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

我正在使用以下两个表:

表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) 汇总第二个表:

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中与键匹配的所有记录