Maison >base de données >tutoriel mysql >Comment résumer correctement les données de plusieurs tables SQL et éviter des résultats incorrects ?
Résumer les données de plusieurs tables en SQL : corriger les résultats incorrects
Dans le domaine de l'analyse des données, il est souvent nécessaire de combiner des informations provenant de plusieurs tableaux pour avoir une compréhension globale. Une tâche courante consiste à calculer la somme des valeurs de ces tableaux, regroupées par une colonne commune. Cependant, comme le montre le code fourni, des résultats incorrects peuvent survenir si les données ne sont pas traitées correctement.
La requête initiale fournie :
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]
tente de calculer la somme des valeurs de deux tables, AP et INV pour un PROJET spécifique. Cependant, le problème réside dans l'utilisation de la clause GROUP BY. Le regroupement des résultats par AP.PROJECT entraîne l'inclusion de valeurs en double dans la somme, ce qui entraîne des totaux incorrects.
Pour remédier à cela, une approche plus robuste utilisant des sous-requêtes est nécessaire :
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 requête améliorée utilise des sous-requêtes pour calculer la somme des valeurs pour chaque PROJET individuellement. En isolant les calculs dans des sous-requêtes, nous éliminons le problème des valeurs en double incluses dans les sommes. Le résultat est un résumé précis et significatif des données de plusieurs tableaux, regroupés par colonne souhaitée.
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!