首页 > 数据库 > mysql教程 > 在 MySQL 中连接多个表时如何正确对聚合值求和?

在 MySQL 中连接多个表时如何正确对聚合值求和?

Susan Sarandon
发布: 2025-01-19 14:11:10
原创
548 人浏览过

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

MYSQL 中使用 SUM 问题连接表

使用 SUM 聚合连接表可能会带来复杂性。为了解决查询中结果不正确的问题,让我们深入研究问题并探索解决方案。

给定查询中的主要问题是多个联接,导致叉积。将总和乘以其他表中的匹配行数会导致错误的结果。为了解决这个问题,我们可以将 SUM 操作重新定位到子查询中。

这是一个优化的查询,其中包含两个 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;
登录后复制

此查询对分钟和总计使用子查询求和,通过避免叉积乘法来确保准确的结果。它还调整两个子查询的时间范围,以确保数据检索的一致性。通过子查询重构查询,有效解决了多重连接和SUM聚合带来的问题。

以上是在 MySQL 中连接多个表时如何正确对聚合值求和?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板