집 >데이터 베이스 >MySQL 튜토리얼 >MySQL에서 테이블을 조인할 때 곱해진 SUM 결과를 방지하려면 어떻게 해야 합니까?
MySQL 조인에서 곱해진 SUM 결과 방지
MySQL 조인을 SUM 집계와 결합하면 데카르트 곱 효과로 인해 종종 부정확하고 부풀려진 결과가 생성됩니다. 여러 조인으로 인해 행이 중복되어 SUM 값이 부풀려질 수 있습니다. 해결책은 하위 쿼리를 사용하여 데이터를 사전 집계하는 것입니다.
효과적인 전략: 정확한 집계를 위한 하위 쿼리
SUM이 부풀려지는 것을 방지하려면 테이블을 조인하기 전에 집계를 수행하세요. 이는 데이터를 독립적으로 그룹화하고 합계한 다음 집계된 결과를 조인하는 하위 쿼리를 통해 달성됩니다.
쿼리 예 및 설명:
이 쿼리는 SUM 집계를 사용하는 동안 테이블을 올바르게 조인하는 방법을 보여줍니다.
<code class="language-sql">SELECT i.last_name, i.first_name, DATE_FORMAT(LEAST(m.mil_date, t.tm_date), '%m/%d/%y') AS dates, t.total, m.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 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 FROM bhds_timecard WHERE tm_date BETWEEN '2016-04-11' AND '2016-04-30' AND ds_id = 5 GROUP BY ds_id, week ) AS t ON t.ds_id = i.ds_id AND t.week = m.week;</code>
하위 쿼리(m
및 t
)는 drive_time
및 tm_hours
별로 그룹화하여 각각 ds_id
및 week
의 합계를 독립적으로 계산합니다. 그런 다음 이러한 집계된 결과는 bhds_teachers
및 일치하는 i
숫자를 사용하여 ds_id
(별칭 week
)과 결합됩니다. LEAST()
은 집계된 두 테이블에서 가장 빠른 날짜를 선택합니다. 이 방법은 합산 전에 결합 시 발생하는 곱셈 문제를 방지합니다.
위 내용은 MySQL에서 테이블을 조인할 때 곱해진 SUM 결과를 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!