我有两张 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/