Getting Skewed Results from LEFT OUTER JOIN with 3 TABLES
JOINs together with aggregates (eg, SUM()) often give you bigger values than you expect.  To see this, remove the SUMs and GROUP BY and stare at the output.  You may see, for example, the same mghours.hourstime showing up multiple times.  Hence, SUM(mghours.hourstime) is inflated.

This is happening because JOIN mgtraining is coming up with multiple rows in mgtraining for each row in mghours.

The solution is to do the query in steps.  Notice how the inner query avoids inflating "vol":

SELECT  x.*,
        SUM(...) AS 'at
    FROM (
        SELECT  ...,
                SUM(mghours.hourstime) AS vol
            FROM ...
            GROUP BY ...
         ) x
    LEFT JOIN mgtraining ON ...
    GROUP BY ...
    ORDER BY ...;