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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何在没有重复数据的情况下对两个具有连接的表求和?相关的知识,希望对你有一定的参考价值。

我无法在两个表之间正确进行SUM,并且我不明白原因。如果有人帮助我,我将非常感激。

我的第一个查询非常简单,效果很好。 22/01/2020的结果为Cost =“ 252.263602”。这是正确的答案。

SELECT
  Date,
  AdGroupId,
  SUM(A1.Cost)/1000000 AS Cost
FROM
  `table` A1
GROUP BY
  1, 2
ORDER BY
  Date DESC

但是我需要将此表与另一个表连接起来以获取更多信息。为此,我有以下查询:

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

2020年2月1日的结果是什么?费用=“ 1009.054408”。是错的...

我尝试使用不同的JOINS,使用USING进行更改...,但不起作用。

我试图在没有SUM的情况下加入两个表,并且效果很好。我得到了信息,可以从两个表中加入更多列。

我该怎么做才能在SUM中得到一个错误错误?

非常感谢!

答案

我解决了我的问题。我将代码复制到这里,以防万一有人需要。

谢谢。

SELECT
  Date,
  AdGroupId,
  SUM(Cost)/1000000 AS Cost

FROM ((
    SELECT
        Date,
        AdGroupId,
        Cost,
     FROM
       `table1` A1 )
  UNION ALL (
    SELECT
        Date,
        AdGroupId,
        VideoViews

    FROM
          `table2` V1 ))
GROUP BY
  Date,
  AdGroupId
ORDER BY
  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


以上是关于我如何在没有重复数据的情况下对两个具有连接的表求和?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 R 中的表的情况下对分类值的实例求和?

如何在没有任何重复行的情况下连接两个表中的表?

如何在不删除重复值的情况下对数据集进行分组

MySQL创建视图连接两个完整的表

如何使用 SQL 和 Python 连接两个具有日期条件的表?

从 MySQL 中具有不同列的表的多个连接结果中删除重复项