Sql 如何在没有重复数据的情况下对两个具有联接的表求和?

Sql 如何在没有重复数据的情况下对两个具有联接的表求和?,sql,join,group-by,google-bigquery,sum,Sql,Join,Group By,Google Bigquery,Sum,我不能在两张表之间正确地求和,我不明白原因。如果有人帮助我,我将非常感激 我的第一个查询非常简单,运行良好。2020年1月22日的结果是成本=252.263602。这是正确的答案 选择 日期 AdGroupId, SUMA1.成本/1000000作为成本 从…起 `表'A1 分组 1, 2 订购人 Date DESC我解决了我的问题。我把代码复制到这里,以防有人需要 谢谢 选择 A1.日期, A1.AdGroupId, 费用 意见 从…起 选择 日期 AdGroupId, 总成本/10000

我不能在两张表之间正确地求和,我不明白原因。如果有人帮助我,我将非常感激

我的第一个查询非常简单,运行良好。2020年1月22日的结果是成本=252.263602。这是正确的答案

选择 日期 AdGroupId, SUMA1.成本/1000000作为成本 从…起 `表'A1 分组 1, 2 订购人
Date DESC我解决了我的问题。我把代码复制到这里,以防有人需要

谢谢

选择 A1.日期, A1.AdGroupId, 费用 意见 从…起 选择 日期 AdGroupId, 总成本/1000000作为成本 从…起 `表1` 分组 日期 AdGroupId A1 左连接 选择 日期 AdGroupId, 将视图视为视图 从…起 `表2` 分组 日期 AdGroupId V1 在…上 A1.日期=V1.日期 A1.AdGroupId=V1.AdGroupId 订购人
Date DESC我解决了我的问题。我把代码复制到这里,以防有人需要

谢谢

选择 A1.日期, A1.AdGroupId, 费用 意见 从…起 选择 日期 AdGroupId, 总成本/1000000作为成本 从…起 `表1` 分组 日期 AdGroupId A1 左连接 选择 日期 AdGroupId, 将视图视为视图 从…起 `表2` 分组 日期 AdGroupId V1 在…上 A1.日期=V1.日期 A1.AdGroupId=V1.AdGroupId 订购人
Date DESC这是一个基数问题。两个表中的每个组都有多条记录,因此同一个值会被多次求和。您可以通过在不进行聚合的情况下运行连接查询来显示问题

一种典型的解决方案是在子查询中聚合,然后加入:

SELECT
    A1.Date,
    A1.AdGroupId
    A1.Cost
    V1.VideoViews
FROM (
    SELECT
        Date,
        AdGroupId,
        SUM(Cost)/1000000 AS Cost
    FROM `table`
    GROUP BY 1, 2
) A1
INNER JOIN (
    SELECT
        Date,
        AdGroupId,
        SUM(VideoViews) AS VideoViews
    FROM `table2`
    GROUP BY 1, 2
) V1
    ON A1.Date = V1.Date
    AND A1.AdGroupId = V1.AdGroupId



这是一个基数问题。两个表中的每个组都有多条记录,因此同一个值会被多次求和。您可以通过在不进行聚合的情况下运行连接查询来显示问题

一种典型的解决方案是在子查询中聚合,然后加入:

SELECT
    A1.Date,
    A1.AdGroupId
    A1.Cost
    V1.VideoViews
FROM (
    SELECT
        Date,
        AdGroupId,
        SUM(Cost)/1000000 AS Cost
    FROM `table`
    GROUP BY 1, 2
) A1
INNER JOIN (
    SELECT
        Date,
        AdGroupId,
        SUM(VideoViews) AS VideoViews
    FROM `table2`
    GROUP BY 1, 2
) V1
    ON A1.Date = V1.Date
    AND A1.AdGroupId = V1.AdGroupId



谢谢你的帮助,GMB!我刚刚发布了解决方案。经过一段时间的代码斗争,我找到了解决方案,呵呵,这是一个新手问题;若我想用一个和来聚合其他列,我只需要在最后一部分添加其他联接,不是吗?谢谢谢谢你的帮助,GMB!我刚刚发布了解决方案。经过一段时间的代码斗争,我找到了解决方案,呵呵,这是一个新手问题;若我想用一个和来聚合其他列,我只需要在最后一部分添加其他联接,不是吗?谢谢这涉及到一个常见错误,即人们希望某些子查询的某些联接(每个联接可能涉及不同的键),每个子查询可能涉及联接和/或聚合,但他们错误地尝试进行所有联接,然后进行所有聚合,或者在以前的聚合上进行聚合。在适当的行上编写单独的聚合和/或聚合一个case语句;在公共唯一列集上联接。有时,独立聚合可以在非键联接之后选择正确的值。PS代码段用于css/html/javascript。使用代码块。PS对于代码问题给出一个答案。这回答了你的问题吗?这是一个常见问题。在考虑发帖之前,请阅读您的教科书和/或手册,并在谷歌上搜索任何错误消息或您的问题/问题/目标的许多清晰、简洁和准确的措辞,包括或不包括您的特定字符串/名称和网站:stackoverflow.com&tags;阅读许多答案。如果你发布一个问题,用一句话作为标题。反思你的研究。请参见文本上方的投票箭头(&S)。PS我刚在谷歌上搜索了你的标题“sql site:stackoverflow.com:2011之前”。这涉及到一个常见错误,即人们希望一些子查询的联接,每个联接可能涉及不同的键,每个子查询可能涉及联接和/或聚合,但是他们错误地尝试进行所有的连接,然后进行所有的聚合,或者在以前的聚合上进行聚合。在适当的行上编写单独的聚合和/或聚合一个case语句;在公共唯一列集上联接。有时,独立聚合可以在非键联接之后选择正确的值。PS代码段用于css/html/javascript。使用代码块。PS对于代码问题给出一个答案。这回答了你的问题吗?这是一个常见问题。在考虑发帖之前,请阅读您的教科书和/或手册,并在谷歌上搜索任何错误消息或您的问题/问题/目标的许多清晰、简洁和准确的措辞,包括或不包括您的特定字符串/名称和网站:stackoverflow.com&tags;阅读许多答案。如果你发布一个问题,用一句话作为标题。反思你的研究。请参见文本上方的投票箭头(&S)。PS我刚刚用谷歌搜索了你的标题“2011年之前的sql站点:stackoverflow.com”。