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中文网其他相关文章!