完全外部联接在两个均衡器上未按预期工作



我想在Big Query中使用完整的外部联接来组合下面的两个表。表A没有我需要从表B带来的某些产品,但当我加入活动&subcompagn,我的加入没有带来'CellPhone'数据。我的结果看起来更像是左联接。请参阅下面的查询

SELECT
a.campaign 
, a.subcampaign
, a.product
, sum(sales)
, sum(cost)
FROM
(
SELECT
campaign 
, subcampaign 
, product 
, sum(sales)
FROM
table_a
GROUP BY
1, 2, 3
) a
FULL OUTER JOIN
(
SELECT
campaign 
, subcampaign
, product
, sum(cost)
FROM
table_b
GROUP BY 1,2,3
) b
ON
a.campaign = b.campaign
AND a.subcampaign = b.subcampaign
GROUP BY
1,2,3

表a

产品销售电视<100美元>
活动子活动
活动1Store 581游戏$50
活动1Store 583

我认为问题可能是您的select子句,而不是join

我怀疑混淆之处在于,即使在联接与table_a中的任何内容都不匹配的情况下,您也选择了a.campaign(等等(。如果table_a中没有匹配项,则a.campaign/a.subcampaign/a.product将全部为空。

您可能希望在外部查询中使用类似以下内容的内容:

SELECT
COALESCE(a.campaign, b.campaign)
, COALESCE(a.subcampaign, b.subcampaign)
, COALESCE(a.product, b.product)
, sum(sales)
, sum(cost)
[...]
GROUP BY
COALESCE(a.campaign, b.campaign)
, COALESCE(a.subcampaign, b.subcampaign)
, COALESCE(a.product, b.product)

这样,如果a.campaign(等等(为空,它将回退到b.campaign。这是安全的,因为我们知道,如果两者都有值,那么它们必须相等。

在连接两个表之前进行聚合,这就是为什么在结果中可能不会得到任何null值。尝试从联接中选择所有值,然后聚合以获得您想要的结果,如下所示:

SELECT
ab.campaign, ab.subcampaign, ab.product, SUM(sales), SUM(cost)
FROM (
SELECT *
FROM
table_a
FULL OUTER JOIN
table_b
ON
a.campaign = b.campaign
AND a.subcampaign = b.subcampaign ) ab
GROUP BY
1,2,3

相关内容

  • 没有找到相关文章

最新更新