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中文网其他相关文章!