SELECT p.FirstName,
p.LastName,
p.PilotID,
p.Email,
SUM(TIME_TO_SEC(l.ArrivalTime)-TIME_TO_SEC(l.DepartureTime)
+ IF(TIME_TO_SEC(l.DepartureTime)>TIME_TO_SEC(l.ArrivalTime),24*60*60,0))/3600 AS pHours
FROM Pilots p
LEFT JOIN Log l ON p.PilotID = l.PilotID
GROUP BY PilotID
ORDER BY pHours DESC
This will return the time in hours with the mins & secs expressed as a decimal fraction instead of hh:mm:ss. You could easily write a simple function to translate this back into hh:mm:ss if needs be, or you could select this data twice - first as a decimal for sorting and again as hh:mm:ss for display purposes -
SELECT p.FirstName,
p.LastName,
p.PilotID,
p.Email,
SUM(TIME_TO_SEC(l.ArrivalTime)-TIME_TO_SEC(l.DepartureTime)
+ IF(TIME_TO_SEC(l.DepartureTime)>TIME_TO_SEC(l.ArrivalTime),24*60*60,0)) AS pHours,
SEC_TO_TIME(SUM(TIME_TO_SEC(l.ArrivalTime)-TIME_TO_SEC(l.DepartureTime)
+ IF(TIME_TO_SEC(l.DepartureTime)>TIME_TO_SEC(l.ArrivalTime),24*60*60,0))) AS disp_time
FROM Pilots p
LEFT JOIN Log l ON p.PilotID = l.PilotID
GROUP BY PilotID
ORDER BY pHours DESC