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