Maison > base de données > tutoriel mysql > Comment additionner correctement les valeurs agrégées lors de la jointure de plusieurs tables dans MySQL ?

Comment additionner correctement les valeurs agrégées lors de la jointure de plusieurs tables dans MySQL ?

Susan Sarandon
Libérer: 2025-01-19 14:11:10
original
532 Les gens l'ont consulté

How to Correctly SUM Aggregate Values When Joining Multiple Tables in MySQL?

Joindre des tables avec un problème SUM dans MYSQL

Joindre des tables avec l'agrégation SUM peut introduire des complexités. Pour résoudre le problème des résultats incorrects dans votre requête, approfondissons le problème et explorons une solution.

La principale préoccupation de la requête donnée concerne les jointures multiples, ce qui entraîne un produit croisé. Cette multiplication des sommes par le nombre de lignes correspondantes dans d'autres tableaux conduit à des résultats erronés. Pour résoudre ce problème, nous pouvons déplacer les opérations SUM dans des sous-requêtes.

Voici une requête optimisée qui intègre des sous-requêtes pour les deux agrégations SUM :

SELECT last_name, first_name, DATE_FORMAT(LEAST(mil_date, tm_date), '%m/%d/%y') AS dates, total, minutes
FROM bhds_teachers AS i
LEFT JOIN (
    SELECT ds_id, YEARWEEK(mil_date) AS week, MIN(mil_date) AS mil_date, SUM(drive_time) AS minutes
    FROM bhds_mileage
    WHERE mil_date BETWEEN '2016-04-11' AND  '2016-04-30'
    AND bhds_mileage.ds_id = 5
    GROUP BY ds_id, week) AS m 
ON m.ds_id = i.ds_id
LEFT JOIN (
    SELECT ds_id, YEARWEEK(tm_date) AS week, MIN(tm_date) AS tm_date, SUM(tm_hours) AS total
    WHERE tm_date BETWEEN '2016-04-11' AND '2016-04-30' AND bhds_timecard.ds_id = 5
    GROUP BY ds_id, week) AS t 
ON t.ds_id = i.ds_id AND t.week = m.week;
Copier après la connexion

Cette requête utilise des sous-requêtes pour les minutes et le total. sommations, garantissant des résultats précis en évitant la multiplication de produits croisés. Il aligne également les délais pour les deux sous-requêtes afin de garantir une récupération cohérente des données. En refactorisant la requête avec des sous-requêtes, nous résolvons efficacement le problème causé par les jointures multiples et l'agrégation SUM.

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