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 で複数のテーブルを結合するときに集計値を正しく SUM する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。