如何在外部查询 SQL 中聚合不同的 CTE

问题描述

我正在尝试加入两个 ctes 以获得不同国家和组在 id 上的表现差异,这里是我的例子

每个广告系列都可以在不同的国家/地区完成,那么我如何在最后分组以使每个广告系列 ID 有 1 行?

CTE 1:(计划中)

select 
country,campaign_id,sum(sales) as planned_sales
from table x
group by 1,2

CTE 2:(实际)

select 
country,sum(sales) as actual_sales
from table y
group by 1,2 

外部选择

select 
country,planned_sales,actual_sales
planned - actual as diff 
from cte1
join cte2 
on campaign_id = campaign_id 

解决方法

应该这样做:

select 
cte1.campaign_id,sum(cte1.planned_sales),sum(cte2.actual_sales)
sum(cte1.planned_sales) - sum(cte2.actual_sales) as diff 
from cte1
join cte2 
on cte1.campaign_id = cte2.campaign_id and cte1.country = cte2.country
group by 1
,

我建议使用 full join,这样 所有 数据都包含在两个表中,而不仅仅是一个或另一个中的数据。您的查询基本正确,但需要一个 group by

select campaign_id,sum(cte1.planned_sales) as planned_sales
       sum(cte2.actual_sales) as actual_sales,(coalesce(sum(cte1.planned_sales),0) - 
        coalesce(sum(cte2.actual_sales),0)
       ) as diff
from cte1 full join
     cte2 
     using (campaign_id,country) 
group by campaign_id;

也就是说,CTE 没有理由应该同时按活动和国家/地区汇总。他们可以仅按广告系列 ID 进行聚合 - 简化查询并提高性能。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...