postgresql - 使用 Join 和聚合函数时合并两个表中的两列

标签 postgresql join merge

我有两张 table 。一个是 Cost_Table,另一个是 Hire_Table。

Cost_Table的布局如下图所示:

 sitename   cost   impressions  deliverydate
  Yahoo     100      10000       2016-01-01
  Yahoo     200      20000       2016-01-02
  Google    200      30000       2016-01-02
  Google    500      50000       2016-01-03

Hire_Table的布局如下图所示:

 site      Hiredate
 Yahoo    2016-03-01
 Yahoo    2016-04-02
 Yahoo    2016-04-28
 Bing     2016-03-01
 Bing     2014-06-01

我加入了两个表,我的代码如下:

 select hire.site, cost.mediaspend,cost.impression,count(hire.site) as hires from Hire_Table Hire

 Full Join

(select sitename, sum(cost) as mediaspend, sum(impressions) as impression from Cost_Table
 where deliverydate between '2016-01-01' and '2016-07-31'
 group by sitename)  cost  

 on hire.site=cost.sitename

 group by hire.site, cost.mediaspend,cost.impression

结果是:

 sitename   mediaspend   impression   hires
  Yahoo       300          30000        3
  Bing        --            --          2

但是,这不会给我 sitename,它不在 Hire_Table 中,例如 Google。我尝试使用 Coalesce,但它也没有改变结果。 合并(cost.sitename,hire.site)

我看到一些帖子提到了 Union 功能。我认为它可能不适用于我的示例,因为我想从两个表中提取不同的内容。任何灯将不胜感激。谢谢!

最佳答案

SELECT allSites.sitename, costs.mediaspend,  costs.impressions, Hires.hires
FROM (SELECT sitename FROM Cost_Table 
      UNION
      SELECT site     FROM Hire_Table) as allSites
LEFT JOIN (SELECT sitename,                
                  SUM(cost) as mediaspend,
                  SUM(impressions) as impressions
           FROM Cost_Table
           GROUP BY sitename) costs
  ON allSites.sitename = costs.sitename
LEFT JOIN (SELECT site,                
                  COUNT(Hiredate) as hires
           FROM Hire_Table 
           GROUP BY site) Hires
  ON allSites.sitename = Hires.site

关于postgresql - 使用 Join 和聚合函数时合并两个表中的两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40266957/

相关文章:

sql - 在 PostgreSQL 9.6 中,扩展填充有简单 JSON 字典的 JSONB 列的最简单方法是什么?

ruby-on-rails - Rails 5.0 - 如何检查记录是否关联到另一个表?

mysql - SQL join 和 count do net 把它放在一起

r - 合并R中的两个因子列

pandas - 如何使用 pandas 根据一行标识符对合并列进行分组?

python - 如何使用 Python 将多个工作表中的 .csv 文件合并为一个 .xls 文件?

sql - Postgres : Select where all rows with the same foreign key are null

postgresql - 使用 postgres_fdw 加速包含多个自连接的 View

sql - 如何在 SQL Server 中将自连接限制为 Top 1

perl - DBIx::Class - 使用预取获取用作条件的所有关系?