sql - 如何在没有重复数据的情况下对两个具有连接的表求和?
问题描述
我无法在两个表之间正确地进行 SUM,我不明白原因。如果有人帮助我,我将非常感激。
我的第一个查询非常简单,效果很好。2020 年 1 月 22 日的结果是 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
22/01/2020 的结果是什么?成本 = “1009.054408”。这是错的...
我尝试过使用不同的 JOINS,用 USING 更改 ON...但它不起作用。
我试图在没有 SUM 的情况下加入两个表,并且效果很好。我得到信息,我可以从两个表中加入更多列。
我在做什么才能在 SUM 中出现错误?
非常感谢!
解决方案
这是一个基数问题。在两个表中,每个组的记录不止一条,因此相同的值被多次求和。您可以通过在没有聚合的情况下运行连接查询来展示该问题。
一种典型的解决方案是聚合子查询,然后加入:
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
推荐阅读
- arrays - excel - 如何仅使用公式将逗号值分隔到单独的单元格中
- label - gnuplot colorbox标签位置
- python - 仅提取括号内的特定单词
- react-native - 每次应用程序自行刷新时,如何防止expo应用程序注销?
- spring-boot - 如何使用 JPQL 查询访问映射超类字段
- vba - Excel 中的 VBA 使用 If、Copy&Paste
- javascript - 如何使用 CASL 限制要修补(更新)的字段值?
- android - 如何访问不同语言的 Android 资源文件?
- node.js - nodejs-express 如何将页面重定向到客户端,从服务器传递一些数据?
- java - Java spring/spring boot 应用程序:Web 逻辑到 Tomcat 的转换