sql >> Database >  >> RDS >> Mysql

Tabellen samenvoegen met SUM-probleem in MYSQL

Wanneer u meerdere joins in de hoofdquery gebruikt, krijgt u een kruisproduct van alle tabellen, zodat de sommen worden vermenigvuldigd met het aantal rijen dat overeenkomt in een andere tabel. U moet de sommen naar subquery's verplaatsen.

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


  1. Hoe interpreteer je het uitlegplan van een query?

  2. Hoe Galera-cluster te beveiligen - 8 tips

  3. Gebruik sys.sql_dependencies niet in SQL Server (het is verouderd)

  4. SQL:Als het gaat om NOT IN en NOT EQUAL TO, wat is dan efficiënter en waarom?