Agrégation de bases de données sur plusieurs tables : correction des calculs de somme
Lorsque vous traitez plusieurs tables dans une base de données, les fonctions d'agrégation telles que SUM nécessitent une manipulation minutieuse pour garantir des résultats précis. Ceci est illustré par une requête tentant de calculer la somme des valeurs de deux tables, AP et INV, toutes deux comportant des colonnes [PROJET] et [Valeur]. Le résultat souhaité doit ressembler à :
PROJECT | SUM_AP | SUM_INV
Cependant, la requête fournie a présenté des résultats incorrects en raison d'une erreur de sommation :
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]
Le problème réside dans le regroupement des valeurs. La clause GROUP BY combine des valeurs en double, ce qui conduit à des sommes incorrectes.
Pour remédier à cela, des sous-sélections peuvent être utilisées :
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]
Cette approche calcule les sommes séparément pour chaque [PROJECT ] en utilisant des sous-sélections, ce qui permet une agrégation précise.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!