首页 > 数据库 > mysql教程 > 如何在SQL中准确计算多个表的SUM?

如何在SQL中准确计算多个表的SUM?

DDD
发布: 2024-12-30 11:43:15
原创
907 人浏览过

How Can I Accurately Calculate SUMs from Multiple Tables in SQL?

查询多个表进行 SUM 计算

在关系数据库中,通常需要跨多个表进行数据聚合。这对于汇总值或计算总计特别有用。然而,了解数据汇总的原理对于确保结果准确非常重要。

查询两个表 AP 和 INV 时会出现这样的情况,这两个表共享一个名为 [PROJECT] 的公共列。目标是返回一个结果集,其中包含 PROJECT 作为主键和两个汇总列:SUM_AP 和 SUM_INV,分别表示 AP 和 INV 表中每个项目的 Value 列的总和。

常见方法解决这个问题的方法是使用 INNER JOIN 操作,如以下代码所示:

SELECT AP.[PROJECT],
SUM(AP.Value) AS SUM_AP, 
SUM(INV.Value) AS SUM_INV
FROM AP INNER JOIN INV ON (AP.[PROJECT] =INV.[PROJECT])
WHERE AP.[PROJECT] = 'XXXXX'
GROUP BY AP.[PROJECT]
登录后复制

但是,此查询返回不正确的结果,因为分组操作(GROUP BY)在求和(SUM)之前应用。这会导致总和中包含重复值,从而导致总数膨胀。

要解决此问题,更准确的方法是使用子选择对每个表单独执行聚合:

SELECT 
    AP1.[PROJECT],
    (SELECT SUM(AP2.Value) FROM AP AS AP2 WHERE AP2.PROJECT = AP1.PROJECT) AS SUM_AP,
    (SELECT SUM(INV2.Value) FROM INV AS INV2 WHERE INV2.PROJECT = AP1.PROJECT) AS SUM_INV
FROM AP AS AP1 
    INNER JOIN INV AS INV1 
        ON (AP1.[PROJECT] =INV1.[PROJECT])
WHERE AP1.[PROJECT] = 'XXXXX'
GROUP BY AP1.[PROJECT]
登录后复制

此修改后的查询使用 SUM 函数中的子选择来计算每个项目的 SUM_AP 和 SUM_INV 值。子查询根据匹配的 PROJECT 值独立聚合每个表的 Value 列,消除重复值的问题。

利用这种方法,您可以有效地查询多个表并执行精确的聚合操作,以获得期望的汇总结果,没有任何错误的计算。

以上是如何在SQL中准确计算多个表的SUM?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板