首页 >数据库 >mysql教程 >如何使用子查询正确聚合 SQL 中多个表的数据?

如何使用子查询正确聚合 SQL 中多个表的数据?

Linda Hamilton
Linda Hamilton原创
2025-01-01 13:44:11195浏览

How to Correctly Aggregate Data from Multiple Tables in SQL Using Subqueries?

SQL 查询聚合多个表中的数据

在 SQL 中,可以使用各种技术来聚合多个表中的数据。以下是组合两个表中的数据的查询的场景和解决方案:

场景:

考虑两个表,AP 和 INV,都包含列 [PROJECT]和[值]。目标是检索计算两个表中每个项目的 [Value] 总和的结果,结果格式如下:

PROJECT | SUM_AP | SUM_INV
---------+--------+--------
XXXXX   | 500    | 800

错误查询:

尝试了以下查询,但结果不准确sums:

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]

错误结果的原因:

错误的查询在应用总和之前对值进行分组,导致重复的项目值包含在总和中。

正确解决方案:

解决为此,可以使用涉及子选择的查询:

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]

此查询利用子选择分别计算每个项目内的总和,消除重复值的问题并提供正确的聚合结果。

以上是如何使用子查询正确聚合 SQL 中多个表的数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn