SQL 内部联接在联接后返回错误值

SQL inner join returning wrong values after join

我有两个 table,分别是 adsvideos。像 date,ad_id,ad_name,campaign_name 这样的维度在两个 table 中都很常见。但是,广告 table 有 spendimpressions,而 videos table 有 videoviews。当我按每个 table 分组时,我聚合的指标值似乎没问题。但是一旦我加入他们, return 输出就不正确 例如,如果第 1 天的总支出对于特定 ad_id 是 100,当我加入他们时,我将其视为 400.

SELECT
  a.date adsdate,   a.campaign_name campaign_name,
  a.ad_group_name ad_group_name,
  a.ad_name ad_name,
  a.ad_id ad_id,
  SUM(a.cost) fb_cost,
  SUM(a.impressions) fb_impressions,
  SUM(b.action_video_view) fb_videoview
FROM
  fb_ads a  inner join
  `fb_videos b ON
   CONCAT(a.date,'_',a.ad_id)=
   CONCAT(b.date,'_',b.ad_id)
GROUP BY
  adsdate,
  campaign_name,
  ad_group_name,
  ad_name,
  ad_id
  HAVING
  ad_id = ‘1234567’
order by 
adsdate asc

检查这个:

SELECT adsdate,
       a.campaign_name,
       a.ad_group_name,
       a.ad_name,
       '1234567' ad_id,
       a.fb_cost,
       a.fb_impressions,
       b.fb_videoview
FROM ( SELECT `date` adsdate,
              campaign_name,
              ad_group_name,
              ad_name,
              SUM(cost) fb_cost,
              SUM(impressions) fb_impressions
       FROM fb_ads
       WHERE ad_id = '1234567'
       GROUP BY 1,2,3,4 ) a
JOIN ( SELECT `date` adsdate,
              SUM(action_video_view) fb_videoview
       FROM fb_videos
       WHERE ad_id = '1234567'
       GROUP BY 1 ) b USING (adsdate)

How would I do this with by joining using concat – sten

您使用唯一的 ad_id 值 (ad_id = ‘1234567’) - 所以通过它加入没有意义,通过 adsdate 加入就足够了。

但是如果你想通过 2 列连接,那么你不需要串联。使用以下任一加入条件:

.. ON t1.ad_id = t2.ad_id AND t1.adsdate = t2.adsdate ..
.. ON (t1.ad_id, t1.adsdate) = (t2.ad_id, t2.adsdate) .. 
.. USING (ad_id, adsdate) .. 

所有这些形式都与您使用 CONCAT 的表达式完全等价,但更加快速和清晰。