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

Mysql SQL内部联接在联接后返回错误的值,mysql,join,inner-join,Mysql,Join,Inner Join,我有两张桌子,叫做广告和视频。日期、广告id、广告名称、活动名称等维度在这两个表中都很常见。但是,ads表有花费和印象,videos表有视频视图。当我按照每个表进行分组时,我正在聚合的度量值似乎很好。但是一旦我加入他们,返回的输出就不正确了 例如,当我加入他们时,如果一个特定的广告id在第一天的总花费是100,我认为是400 选中此项: 选择adsdate, a、 你的名字, a、 广告集团名称, a、 广告名, “1234567”广告标识, a、 fb_成本, a、 fb_印象, b、 视频视

我有两张桌子,叫做广告和视频。日期、广告id、广告名称、活动名称等维度在这两个表中都很常见。但是,ads表有花费和印象,videos表有视频视图。当我按照每个表进行分组时,我正在聚合的度量值似乎很好。但是一旦我加入他们,返回的输出就不正确了 例如,当我加入他们时,如果一个特定的广告id在第一天的总花费是100,我认为是400

选中此项:

选择adsdate, a、 你的名字, a、 广告集团名称, a、 广告名, “1234567”广告标识, a、 fb_成本, a、 fb_印象, b、 视频视图 从中选择'date`adsdate, 你的名字, 广告集团名称, 广告名, SUMcost fb_成本, 苏穆印象 来自fb_的广告 其中ad_id='1234567' 按1,2,3,4 a分组 加入选择'date'adsdate, SUMaction\u视频视图fb\u视频视图 来自fb_视频 其中ad_id='1234567' 使用adsdate按1b分组 我如何使用concat–sten加入

您只使用了ad_id值ad_id='1234567'-因此通过它连接没有意义,通过adsdate连接就足够了

但是,如果您希望通过两列进行连接,则不需要进行串联。使用以下任一连接条件:

.. 在t1.ad_id=t2.ad_id和t1.adsdate=t2.adsdate。。 .. 在t1.ad_id上,t1.adsdate=t2.ad_id,t2.adsdate。。 .. 使用ad_id、adsdate。。
所有这些形式都是CONCAT表达式的绝对等效形式,但更快速、更清晰。

将条件ad_id='1234567'从必须移动到WHERE as a.ad_id='1234567'。如果它有一个确定的值,那么我看不出为什么要选择它或者在分组中用文字值来代替它。不要在ON子句中使用函数-使用单独的列Equality。但是,一旦我加入它们,返回的输出对于例如是不正确的,如果当我加入它们时,第一天某个特定ad_id的总花费是100,我将其视为400。加入乘法运算。在子查询中聚合,然后加入。我使用的是必须统计一个广告的结果。我可以忽略这一点。你能举一个例子来说明我是如何在子查询中使用agg的,然后joingI使用不得不对一个广告的结果进行计数的。我可以忽略这一点。在分组之前进行,而不是在分组之后。我计划在知道联接返回正确的值之后删除,这可能会给此人一个答案,但没有上下文说明原因,也没有其他类似的人知道原因。我建议编辑你的帖子,并说明你为什么要分组。甚至可以通过多行添加说明,说明它们的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