Maison > base de données > tutoriel mysql > Comment agréger correctement les valeurs SUM sur plusieurs tables de base de données ?

Comment agréger correctement les valeurs SUM sur plusieurs tables de base de données ?

Susan Sarandon
Libérer: 2024-12-29 05:45:11
original
946 Les gens l'ont consulté

How to Correctly Aggregate SUM Values Across Multiple Database Tables?

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
Copier après la connexion

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]
Copier après la connexion

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]
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal